Started adding the ability to translate DJUI menus

This commit is contained in:
MysterD 2023-03-31 15:18:19 -07:00
parent abaaf10931
commit fe8c510ee4
31 changed files with 804 additions and 256 deletions

View file

@ -660,6 +660,11 @@ else
BASS_LIBS := lib/bass/libbass.so lib/bass/libbass_fx.so
endif
LANG_DIR := lang
# Remove old lang dir
_ := $(shell rm -rf ./$(BUILD_DIR)/$(LANG_DIR))
MOD_DIR := mods
# Remove old mod dir
@ -1225,6 +1230,9 @@ $(BUILD_DIR)/$(DISCORD_SDK_LIBS):
$(BUILD_DIR)/$(BASS_LIBS):
@$(CP) -f $(BASS_LIBS) $(BUILD_DIR)
$(BUILD_DIR)/$(LANG_DIR):
@$(CP) -f -r $(LANG_DIR) $(BUILD_DIR)
$(BUILD_DIR)/$(MOD_DIR):
@$(CP) -f -r $(MOD_DIR) $(BUILD_DIR)
@ -1591,7 +1599,7 @@ ifeq ($(TARGET_N64),1)
$(BUILD_DIR)/$(TARGET).objdump: $(ELF)
$(OBJDUMP) -D $< > $@
else
$(EXE): $(O_FILES) $(MIO0_FILES:.mio0=.o) $(ULTRA_O_FILES) $(GODDARD_O_FILES) $(BUILD_DIR)/$(RPC_LIBS) $(BUILD_DIR)/$(DISCORD_SDK_LIBS) $(BUILD_DIR)/$(BASS_LIBS) $(BUILD_DIR)/$(MOD_DIR)
$(EXE): $(O_FILES) $(MIO0_FILES:.mio0=.o) $(ULTRA_O_FILES) $(GODDARD_O_FILES) $(BUILD_DIR)/$(RPC_LIBS) $(BUILD_DIR)/$(DISCORD_SDK_LIBS) $(BUILD_DIR)/$(BASS_LIBS) $(BUILD_DIR)/$(LANG_DIR) $(BUILD_DIR)/$(MOD_DIR)
@$(PRINT) "$(GREEN)Linking executable: $(BLUE)$@ $(NO_COL)\n"
$(V)$(LD) $(PROF_FLAGS) -L $(BUILD_DIR) -o $@ $(O_FILES) $(ULTRA_O_FILES) $(GODDARD_O_FILES) $(LDFLAGS) $(EXTRA_INCLUDES)
endif

272
lang/english.ini Normal file
View file

@ -0,0 +1,272 @@
[MENU]
BACK = "Back"
CANCEL = "Cancel"
NO = "No"
YES = "Yes"
[CAMERA]
CAMERA = "CAMERA"
FREE_CAMERA = "Free Camera"
ANALOG_CAMERA = "Analog Camera"
MOUSE_LOOK = "Mouse Look"
INVERT_X = "Invert X"
INVERT_Y = "Invert Y"
X_SENSITIVITY = "X Sensitivity"
Y_SENSITIVITY = "Y Sensitivity"
AGGRESSION = "Aggression"
PAN_LEVEL = "Pan Level"
DECELERATION = "Deceleration"
[CHEATS]
CHEATS = "CHEATS"
MOON_JUMP = "Moon Jump"
GOD_MODE = "God Mode"
INFINITE_LIVES = "Infinite Lives"
SUPER_SPEED = "Super Speed"
RESPONSIVE_CONTROLS = "Responsive Controls"
RAPID_FIRE = "Rapid Fire (A)"
BLJ_ANYWHERE = "BLJ Anywhere"
ALWAYS_TRIPLE_JUMP = "Always Triple Jump"
[CONTROLS]
CONTROLS = "CONTROLS"
N64_BINDS = "N64 Binds"
EXTRA_BINDS = "Extra Binds"
BACKGROUND_GAMEPAD = "Background Gamepad (must restart)"
GAMEPAD = "Gamepad"
DEADZONE = "Deadzone"
RUMBLE_STRENGTH = "Rumble Strength"
CHAT = "Chat"
PLAYERS = "Players"
D_UP = "D Up"
D_DOWN = "D Down"
D_LEFT = "D Left"
D_RIGHT = "D Right"
X = "X"
Y = "Y"
UP = "Up"
DOWN = "Down"
LEFT = "Left"
RIGHT = "Right"
A = "A"
B = "B"
START = "Start"
L = "L"
R = "R"
Z = "Z"
C_UP = "C Up"
C_DOWN = "C Down"
C_LEFT = "C Left"
C_RIGHT = "C Right"
[DISPLAY]
DISPLAY = "DISPLAY"
FULLSCREEN = "Fullscreen"
PRELOAD_TEXTURES = "Preload Textures"
VSYNC = "VSync"
UNCAPPED_FRAMERATE = "Uncapped Framerate"
FRAME_LIMIT = "Frame Limit"
FAST = "Fast"
ACCURATE = "Accurate"
INTERPOLATION = "Interpolation"
NEAREST = "Nearest"
LINEAR = "Linear"
TRIPOINT = "Tripoint"
FILTERING = "Filtering"
D0P5X = "0.5x"
D1X = "1x"
D1P5X = "1.5x"
D3X = "3x"
D10X = "10x"
D100X = "100x"
DRAW_DISTANCE = "Draw Distance"
DYNOS_PACKS = "DynOS Packs"
[DYNOS]
DYNOS = "DYNOS"
[HOST_MESSAGE]
INFO_TITLE = "INFO"
WARN_DISCORD = "Invite friends by right clicking their name on Discord and clicking on\n'\\#d0d0ff\\Invite to Game\\#c8c8c8\\'.\n\nYou can invite channels of servers as well by clicking the \\#d0d0ff\\plus\\#c8c8c8\\ button next to the place where you enter chat.\n\nGame Activity \\#ffa0a0\\must be\\#c8c8c8\\ enabled in your\nDiscord user settings.\n\nAppearing offline \\#ffa0a0\\will prevent\\#c8c8c8\\ invites from being sent."
WARN_DISCORD2 = "\\#ffa0a0\\Error:\\#c8c8c8\\ Could not detect Discord.\n\n\\#a0a0a0\\Try closing the game,\nrestarting Discord,\nand opening the game again."
WARN_SOCKET = "Direct connections \\#ffa0a0\\require you\\#c8c8c8\\ to configure port forwarding in your router.\n\nForward port '\\#d0d0ff\\%d\\#c8c8c8\\' for UDP."
HOST = "Host"
[HOST_MODS]
ROMHACKS = "ROMHACKS"
MODS = "MODS"
[HOST_SAVE]
SAVE_TITLE = "SAVE"
ERASE_TITLE = "ERASE"
CONFIRM = "Are you sure you want to erase this save slot?"
ERASE = "erase"
[HOST_SETTINGS]
SETTINGS = "SETTINGS"
NONSOLID = "Non-solid"
SOLID = "Solid"
FRIENDLY_FIRE = "Friendly Fire"
PLAYER_INTERACTION = "Player interaction"
WEAK = "Weak"
NORMAL = "Normal"
TOO_MUCH = "Too much"
KNOCKBACK_STRENGTH = "Knockback strength"
LEAVE_LEVEL = "Leave level"
STAY_IN_LEVEL = "Stay in level"
NONSTOP = "Non-stop"
ON_STAR_COLLECTION = "On star collection"
SKIP_INTRO_CUTSCENE = "Skip intro cutscene"
SHARE_LIVES = "Share lives"
ENABLE_CHEATS = "Enable cheats"
BUBBLE_ON_DEATH = "Bubble on death"
AMOUNT_OF_PLAYERS = "Amount of players"
[HOST]
SERVER_TITLE = "SERVER"
HOST_TITLE = "HOST"
DISCORD = "Discord"
DIRECT_CONNECTION = "Direct Connection"
NETWORK_SYSTEM = "Network system"
PORT = "Port"
SAVE_SLOT = "Save Slot"
SETTINGS = "Settings"
MODS = "Mods"
ROMHACKS = "Rom-Hacks"
APPLY = "Apply"
HOST = "Host"
[JOIN_MESSAGE]
JOINING = "JOINING"
[JOIN]
JOIN_TITLE = "JOIN"
JOIN_DISCORD = "To join a \\#d0d0ff\\Discord\\#c8c8c8\\ lobby:\n\nKeep the game open and click the join button on the invite.\n\nIf the invite says that the game has ended, click the name of the person that sent the invite to refresh it."
JOIN_SOCKET = "Enter \\#d0d0ff\\direct connection\\#c8c8c8\\ IP and port:"
JOIN = "Join"
[MAIN]
QUIT_TITLE = "QUIT"
QUIT_CONFIRM = "Are you sure you want to quit?"
HOST = "Host"
JOIN = "Join"
OPTIONS = "Options"
QUIT = "Quit"
[MENU_OPTIONS]
MAIN_MENU = "MAIN MENU"
LEVEL = "Level"
USE_STAGE_MUSIC = "Use Stage Music"
RANDOM_STAGE = "Random Stage"
PLAY_VANILLA_DEMOS = "Play Vanilla Demos"
[MISC]
DEBUG_TITLE = "DEBUG"
FIXED_COLLISIONS = "Fixed Collisions"
LUA_PROFILER = "Lua Profiler"
DEBUG_PRINT = "Debug Print"
DEBUG_INFO = "Debug Info"
DEBUG_ERRORS = "Debug Errors"
MISC_TITLE = "MISC"
PAUSE_IN_SINGLEPLAYER = "Pause In Singleplayer"
DISABLE_POPUPS = "Disable Popups"
MENU_OPTIONS = "Menu Options"
DEBUG = "Debug"
[MODLIST]
MODS = "MODS"
[OPTIONS]
OPTIONS = "OPTIONS"
PLAYER = "Player"
CAMERA = "Camera"
CONTROLS = "Controls"
DISPLAY = "Display"
SOUND = "Sound"
MISC = "Misc"
[PAUSE]
QUIT_TITLE = "QUIT"
QUIT_HOST = "Are you sure you want to stop hosting?"
QUIT_CLIENT = "Are you sure you want to disconnect?"
PAUSE_TITLE = "PAUSE"
PLAYER = "Player"
DYNOS_PACKS = "DynOS Packs"
OPTIONS = "Options"
CHEATS = "Cheats"
SERVER_SETTINGS = "Server Settings"
RESUME = "Resume"
STOP_HOSTING = "Stop Hosting"
DISCONNECT = "Disconnect"
[PLAYER]
PLAYER_TITLE = "PLAYER"
OVERALLS = "Overalls"
SHIRT = "Shirt"
GLOVES = "Gloves"
SHOES = "Shoes"
HAIR = "Hair"
SKIN = "Skin"
CAP = "Cap"
PALETTE = "PALETTE"
PART = "Part"
HEX_CODE = "Hex Code"
RED = "Red"
GREEN = "Green"
BLUE = "Blue"
PLAYER = "Player"
NAME = "Name"
MODEL = "Model"
PALETTE_PRESET = "Palette Preset"
EDIT_PALETTE = "Edit Palette"
[PALETTE]
MARIO = "Mario"
LUIGI = "Luigi"
WALUIGI = "Waluigi"
WARIO = "Wario"
CHUCKYA = "Chuckya"
GOOMBA = "Goomba"
CLOVER = "Clover"
COBALT = "Cobalt"
FURY = "Fury"
HOT_PINK = "Hot Pink"
NICE_PINK = "Nice Pink"
SEAFOAM = "Seafoam"
LILAC = "Lilac"
COPPER = "Copper"
AZURE = "Azure"
BURGUNDY = "Burgundy"
MINT = "Mint"
EGGPLANT = "Eggplant"
ORANGE = "Orange"
ARCTIC = "Arctic"
FIRE_MARIO = "Fire Mario"
FIRE_LUIGI = "Fire Luigi"
FIRE_WALUIGI = "Fire Waluigi"
FIRE_WARIO = "Fire Wario"
BUSY_BEE = "Busy Bee"
FORTRESS = "Fortress"
BATTLEMENTS = "Battlements"
BLUEBERRY_PIE = "Blueberry Pie"
RASPBERRY = "Raspberry"
BUBBLEGUM = "Bubblegum"
ICE_MARIO = "Ice Mario"
ICE_LUIGI = "Ice Luigi"
CUSTOM = "Custom"
[PLAYER_LIST]
PLAYERS = "PLAYERS"
NAME = "name"
LOCATION = "location"
ACT = "act"
[SOUND]
SOUND = "SOUND"
MASTER_VOLUME = "Master Volume"
MUSIC_VOLUME = "Music Volume"
SFX_VOLUME = "Sfx Volume"
ENV_VOLUME = "Env Volume"

272
lang/spanish.ini Normal file
View file

@ -0,0 +1,272 @@
[MENU]
BACK = "Atrás"
CANCEL = "Cancelar"
NO = "No"
YES = "Sí"
[CAMERA]
CAMERA = "CÁMARA"
FREE_CAMERA = "Cámara libre"
ANALOG_CAMERA = "Camara analogica"
MOUSE_LOOK = "Mirada del ratón"
INVERT_X = "Invertir X"
INVERT_Y = "Invertir Y"
X_SENSITIVITY = "Sensibilidad X"
Y_SENSITIVITY = "Sensibilidad Y"
AGGRESSION = "Agresión"
PAN_LEVEL = "Nivel panorámico"
DECELERATION = "Desaceleración"
[CHEATS]
CHEATS = "TRAMPAS"
MOON_JUMP = "Salto de Luna"
GOD_MODE = "Modo de Dios"
INFINITE_LIVES = "Vidas infinitas"
SUPER_SPEED = "Super velocidad"
RESPONSIVE_CONTROLS = "Controles responsivos"
RAPID_FIRE = "Fuego rápido (A)"
BLJ_ANYWHERE = "BLJ en cualquier lugar"
ALWAYS_TRIPLE_JUMP = "Siempre triple salto"
[CONTROLS]
CONTROLS = "CONTROLS"
N64_BINDS = "N64 se une"
EXTRA_BINDS = "Lazos adicionales"
BACKGROUND_GAMEPAD = "Gamepad en segundo plano (debe reiniciarse)"
GAMEPAD = "Control de juegos"
DEADZONE = "Zona muerta"
RUMBLE_STRENGTH = "Fuerza de estruendo"
CHAT = "Charlar"
PLAYERS = "Jugadores"
D_UP = "D arriba"
D_DOWN = "D abajo"
D_LEFT = "D Izquierda"
D_RIGHT = "D Derecha"
X = "X"
Y = "Y"
UP = "Arriba"
DOWN = "Abajo"
LEFT = "Izquierda"
RIGHT = "Bien"
A = "A"
B = "B"
START = "Comenzar"
L = "L"
R = "R"
Z = "Z"
C_UP = "Taza"
C_DOWN = "C abajo"
C_LEFT = "C Izquierda"
C_RIGHT = "C Derecha"
[DISPLAY]
DISPLAY = "MOSTRAR"
FULLSCREEN = "Pantalla completa"
PRELOAD_TEXTURES = "Precargar texturas"
VSYNC = "VSync"
UNCAPPED_FRAMERATE = "Frecuencia de fotogramas sin límite"
FRAME_LIMIT = "Límite de fotogramas"
FAST = "Rápido"
ACCURATE = "Preciso"
INTERPOLATION = "Interpolación"
NEAREST = "Más cercano"
LINEAR = "Lineal"
TRIPOINT = "Tripunto"
FILTERING = "Filtración"
D0P5X = "0.5x"
D1X = "1x"
D1P5X = "1.5x"
D3X = "3x"
D10X = "10x"
D100X = "100x"
DRAW_DISTANCE = "Dibujar distancia"
DYNOS_PACKS = "Paquetes DynOS"
[DYNOS]
DYNOS = "DYNOS"
[HOST_MESSAGE]
INFO_TITLE = "INFORMACION"
WARN_DISCORD = "Invita a amigos haciendo clic derecho en su nombre en Discord y haciendo clic en\n'\\#d0d0ff\\Invitar al juego\\#c8c8c8\\'.\n\nTambién puedes invitar a canales de servidores haciendo clic en \\# d0d0ff\\más\\#c8c8c8\\ al lado del lugar donde ingresas al chat.\n\nActividad del juego \\#ffa0a0\\debe estar\\#c8c8c8\\ habilitado en tu\nconfiguración de usuario de Discord.\n\ nAparecer sin conexión \\#ffa0a0\\evitará\\#c8c8c8\\ que se envíen invitaciones".
WARN_DISCORD2 = "\\#ffa0a0\\Error:\\#c8c8c8\\ No se pudo detectar Discord.\n\n\\#a0a0a0\\Intenta cerrar el juego,\nreiniciar Discord\ny abrir el juego nuevamente".
WARN_SOCKET = "Las conexiones directas \\#ffa0a0\\requieren que\\#c8c8c8\\ configure el reenvío de puertos en su enrutador.\n\nReenvíe el puerto '\\#d0d0ff\\%d\\#c8c8c8\\' para UDP".
HOST = "Anfitrión"
[HOST_MODS]
ROMHACKS = "ROMHACKS"
MODS = "MODIFICACIONES"
[HOST_SAVE]
SAVE_TITLE = "AHORRAR"
ERASE_TITLE = "BORRAR"
CONFIRM = "¿Estás seguro de que quieres borrar este espacio de guardado?"
ERASE = "borrar"
[HOST_SETTINGS]
SETTINGS = "AJUSTES"
NONSOLID = "No sólido"
SOLID = "Sólido"
FRIENDLY_FIRE = "Fuego amigo"
PLAYER_INTERACTION = "Interacción del jugador"
WEAK = "Débil"
NORMAL = "Normal"
TOO_MUCH = "Demasiado"
KNOCKBACK_STRENGTH = "Fuerza de retroceso"
LEAVE_LEVEL = "Dejar nivel"
STAY_IN_LEVEL = "Mantente en el nivel"
NONSTOP = "Sin escalas"
ON_STAR_COLLECTION = "Colección de estrellas"
SKIP_INTRO_CUTSCENE = "Saltar escena de introducción"
SHARE_LIVES = "Compartir vidas"
ENABLE_CHEATS = "Habilitar trucos"
BUBBLE_ON_DEATH = "Burbuja sobre la muerte"
AMOUNT_OF_PLAYERS = "Cantidad de jugadores"
[HOST]
SERVER_TITLE = "SERVIDOR"
HOST_TITLE = "ANFITRIÓN"
DISCORD = "Discord"
DIRECT_CONNECTION = "Conexión directa"
NETWORK_SYSTEM = "Sistema de redes"
PORT = "Puerto"
SAVE_SLOT = "Guardar ranura"
SETTINGS = "Ajustes"
MODS = "Mods"
ROMHACKS = "Rom-Hacks"
APPLY = "Aplicar"
HOST = "Anfitrión"
[JOIN_MESSAGE]
JOINING = "UNIÓN"
[JOIN]
JOIN_TITLE = "UNIRSE"
JOIN_DISCORD = "Para unirse a una sala de \\#d0d0ff\\Discord\\#c8c8c8\\:\n\nMantenga el juego abierto y haga clic en el botón para unirse en la invitación.\n\nSi la invitación dice que el juego ha terminado, haga clic en el nombre de la persona que envió la invitación para actualizarla".
JOIN_SOCKET = "Ingrese \\#d0d0ff\\conexión directa\\#c8c8c8\\ IP y puerto:"
JOIN = "Unirse"
[MAIN]
QUIT_TITLE = "ABANDONAR"
QUIT_CONFIRM = "¿Seguro que quieres salir?"
HOST = "Anfitrión"
JOIN = "Unirse"
OPTIONS = "Opciones"
QUIT = "Abandonar"
[MENU_OPTIONS]
MAIN_MENU = "MENÚ PRINCIPAL"
LEVEL = "Nivel"
USE_STAGE_MUSIC = "Usar música de escenario"
RANDOM_STAGE = "Etapa aleatoria"
PLAY_VANILLA_DEMOS = "Reproducir demostraciones de vainilla"
[MISC]
DEBUG_TITLE = "DEPURAR"
FIXED_COLLISIONS = "Colisiones fijas"
LUA_PROFILER = "Perfilador de Lua"
DEBUG_PRINT = "Impresión de depuración"
DEBUG_INFO = "Información de depuración"
DEBUG_ERRORS = "Errores de depuración"
MISC_TITLE = "VARIOS"
PAUSE_IN_SINGLEPLAYER = "Pausar en un jugador"
DISABLE_POPUPS = "Desactivar ventanas emergentes"
MENU_OPTIONS = "Opciones de menú"
DEBUG = "Depurar"
[MODLIST]
MODS = "MODIFICACIONES"
[OPTIONS]
OPTIONS = "OPCIONES"
PLAYER = "Jugador"
CAMERA = "Cámara"
CONTROLS = "Controls"
DISPLAY = "Mostrar"
SOUND = "Sonido"
MISC = "Miscelánea"
[PAUSE]
QUIT_TITLE = "ABANDONAR"
QUIT_HOST = "¿Estás seguro de que quieres dejar de hospedar?"
QUIT_CLIENT = "¿Estás seguro de que quieres desconectarte?"
PAUSE_TITLE = "PAUSA"
PLAYER = "Jugador"
DYNOS_PACKS = "Paquetes DynOS"
OPTIONS = "Opciones"
CHEATS = "Trucos"
SERVER_SETTINGS = "Configuración del servidor"
RESUME = "Reanudar"
STOP_HOSTING = "Dejar de hospedar"
DISCONNECT = "Desconectar"
[PLAYER]
PLAYER_TITLE = "JUGADOR"
OVERALLS = "Mono"
SHIRT = "Camisa"
GLOVES = "Guantes"
SHOES = "Zapatos"
HAIR = "Cabello"
SKIN = "Piel"
CAP = "Gorra"
PALETTE = "PALETA"
PART = "Parte"
HEX_CODE = "Código hexadecimal"
RED = "Rojo"
GREEN = "Verde"
BLUE = "Azul"
PLAYER = "Jugador"
NAME = "Nombre"
MODEL = "Modelo"
PALETTE_PRESET = "Preajuste de paleta"
EDIT_PALETTE = "Editar paleta"
[PALETTE]
MARIO = "Mario"
LUIGI = "Luigi"
WALUIGI = "Waluigi"
WARIO = "Wario"
CHUCKYA = "Chuckya"
GOOMBA = "Goomba"
CLOVER = "Trébol"
COBALT = "Cobalto"
FURY = "Furia"
HOT_PINK = "Rosa caliente"
NICE_PINK = "Bonito rosa"
SEAFOAM = "Espuma de mar"
LILAC = "Lila"
COPPER = "Cobre"
AZURE = "Azur"
BURGUNDY = "Borgoña"
MINT = "Menta"
EGGPLANT = "Berenjena"
ORANGE = "Naranja"
ARCTIC = "Ártico"
FIRE_MARIO = "Fuego Mario"
FIRE_LUIGI = "Fuego Luigi"
FIRE_WALUIGI = "Fuego Waluigi"
FIRE_WARIO = "Fuego Wario"
BUSY_BEE = "Abeja ocupada"
FORTRESS = "Fortaleza"
BATTLEMENTS = "Almenas"
BLUEBERRY_PIE = "Pastel de arandanos"
RASPBERRY = "Frambuesa"
BUBBLEGUM = "Chicle"
ICE_MARIO = "Mario de hielo"
ICE_LUIGI = "Luigi de hielo"
CUSTOM = "Costumbre"
[PLAYER_LIST]
PLAYERS = "JUGADORES"
NAME = "nombre"
LOCATION = "ubicación"
ACT = "acto"
[SOUND]
SOUND = "SONIDO"
MASTER_VOLUME = "Volumen principal"
MUSIC_VOLUME = "Volumen de la música"
SFX_VOLUME = "Volumen SFX"
ENV_VOLUME = "Volumen envolvente"

View file

@ -12,6 +12,7 @@
#include "djui_gfx.h"
#include "djui_base.h"
#include "djui_interactable.h"
#include "djui_language.h"
#include "djui_root.h"
#include "djui_cursor.h"

View file

@ -0,0 +1,19 @@
#include <stdio.h>
#include "djui_unicode.h"
#include "pc/ini.h"
#include "pc/platform.h"
ini_t* sLang = NULL;
void djui_language_init(char* filename) {
char path[SYS_MAX_PATH] = "";
snprintf(path, SYS_MAX_PATH, "%s/lang/%s", sys_exe_path(), filename);
sLang = ini_load(path);
}
char* djui_language_get(const char *section, const char *key) {
if (!sLang) { return "???"; }
char* value = (char*)ini_get(sLang, section, key);
if (!value) { return "???"; }
return value;
}

View file

@ -0,0 +1,5 @@
#pragma once
#define DLANG(_SECTION, _KEY) djui_language_get(#_SECTION, #_KEY)
void djui_language_init(char* filename);
char* djui_language_get(const char *section, const char *key);

View file

@ -8,23 +8,23 @@ void djui_panel_camera_value_changed(UNUSED struct DjuiBase* caller) {
}
void djui_panel_camera_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("CAMERA");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, CAMERA));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
djui_checkbox_create(body, "Free Camera", &configEnableCamera, djui_panel_camera_value_changed);
djui_checkbox_create(body, "Analog Camera", &configCameraAnalog, djui_panel_camera_value_changed);
djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA), &configEnableCamera, djui_panel_camera_value_changed);
djui_checkbox_create(body, DLANG(CAMERA, ANALOG_CAMERA), &configCameraAnalog, djui_panel_camera_value_changed);
#ifdef BETTERCAMERA
djui_checkbox_create(body, "Mouse Look", &configCameraMouse, djui_panel_camera_value_changed);
djui_checkbox_create(body, DLANG(CAMERA, MOUSE_LOOK), &configCameraMouse, djui_panel_camera_value_changed);
#endif
djui_checkbox_create(body, "Invert X", &configCameraInvertX, djui_panel_camera_value_changed);
djui_checkbox_create(body, "Invert Y", &configCameraInvertY, djui_panel_camera_value_changed);
djui_slider_create(body, "X Sensitivity", &configCameraXSens, 1, 100, djui_panel_camera_value_changed);
djui_slider_create(body, "Y Sensitivity", &configCameraYSens, 1, 100, djui_panel_camera_value_changed);
djui_slider_create(body, "Aggression", &configCameraAggr, 0, 100, djui_panel_camera_value_changed);
djui_slider_create(body, "Pan Level", &configCameraPan, 0, 100, djui_panel_camera_value_changed);
djui_slider_create(body, "Deceleration", &configCameraDegrade, 0, 100, djui_panel_camera_value_changed);
djui_checkbox_create(body, DLANG(CAMERA, INVERT_X), &configCameraInvertX, djui_panel_camera_value_changed);
djui_checkbox_create(body, DLANG(CAMERA, INVERT_Y), &configCameraInvertY, djui_panel_camera_value_changed);
djui_slider_create(body, DLANG(CAMERA, X_SENSITIVITY), &configCameraXSens, 1, 100, djui_panel_camera_value_changed);
djui_slider_create(body, DLANG(CAMERA, Y_SENSITIVITY), &configCameraYSens, 1, 100, djui_panel_camera_value_changed);
djui_slider_create(body, DLANG(CAMERA, AGGRESSION), &configCameraAggr, 0, 100, djui_panel_camera_value_changed);
djui_slider_create(body, DLANG(CAMERA, PAN_LEVEL), &configCameraPan, 0, 100, djui_panel_camera_value_changed);
djui_slider_create(body, DLANG(CAMERA, DECELERATION), &configCameraDegrade, 0, 100, djui_panel_camera_value_changed);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -2,19 +2,19 @@
#include "pc/cheats.h"
void djui_panel_cheats_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("CHEATS");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CHEATS, CHEATS));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
djui_checkbox_create(body, "Moon Jump", &gCheats.moonJump, NULL);
djui_checkbox_create(body, "God Mode", &gCheats.godMode, NULL);
djui_checkbox_create(body, "Infinite Lives", &gCheats.infiniteLives, NULL);
djui_checkbox_create(body, "Super Speed", &gCheats.superSpeed, NULL);
djui_checkbox_create(body, "Responsive Controls", &gCheats.responsiveControls, NULL);
djui_checkbox_create(body, "Rapid Fire (A)", &gCheats.rapidFireA, NULL);
djui_checkbox_create(body, "BLJ Anywhere", &gCheats.bljAnywhere, NULL);
djui_checkbox_create(body, "Always Triple Jump", &gCheats.alwaysTripleJump, NULL);
djui_checkbox_create(body, DLANG(CHEATS, MOON_JUMP), &gCheats.moonJump, NULL);
djui_checkbox_create(body, DLANG(CHEATS, GOD_MODE), &gCheats.godMode, NULL);
djui_checkbox_create(body, DLANG(CHEATS, INFINITE_LIVES), &gCheats.infiniteLives, NULL);
djui_checkbox_create(body, DLANG(CHEATS, SUPER_SPEED), &gCheats.superSpeed, NULL);
djui_checkbox_create(body, DLANG(CHEATS, RESPONSIVE_CONTROLS), &gCheats.responsiveControls, NULL);
djui_checkbox_create(body, DLANG(CHEATS, RAPID_FIRE), &gCheats.rapidFireA, NULL);
djui_checkbox_create(body, DLANG(CHEATS, BLJ_ANYWHERE), &gCheats.bljAnywhere, NULL);
djui_checkbox_create(body, DLANG(CHEATS, ALWAYS_TRIPLE_JUMP), &gCheats.alwaysTripleJump, NULL);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -13,8 +13,8 @@ void djui_panel_confirm_create(struct DjuiBase* caller, char* title, char* messa
struct DjuiRect* rect1 = djui_rect_container_create(body, 64);
{
djui_button_left_create(&rect1->base, "No", DJUI_BUTTON_STYLE_NORMAL, djui_panel_menu_back);
djui_button_right_create(&rect1->base, "Yes", DJUI_BUTTON_STYLE_NORMAL, on_yes_click);
djui_button_left_create(&rect1->base, DLANG(MENU, NO), DJUI_BUTTON_STYLE_NORMAL, djui_panel_menu_back);
djui_button_right_create(&rect1->base, DLANG(MENU, YES), DJUI_BUTTON_STYLE_NORMAL, on_yes_click);
}
}

View file

@ -9,12 +9,12 @@ void djui_panel_controls_value_change(UNUSED struct DjuiBase* caller) {
}
void djui_panel_controls_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("CONTROLS");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CONTROLS, CONTROLS));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
djui_button_create(body, "N64 Binds", DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_n64_create);
djui_button_create(body, "Extra Binds", DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_extra_create);
djui_checkbox_create(body, "Background Gamepad (must restart)", &configBackgroundGamepad, NULL);
djui_button_create(body, DLANG(CONTROLS, N64_BINDS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_n64_create);
djui_button_create(body, DLANG(CONTROLS, EXTRA_BINDS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_extra_create);
djui_checkbox_create(body, DLANG(CONTROLS, BACKGROUND_GAMEPAD), &configBackgroundGamepad, NULL);
#ifdef HAVE_SDL2
int numJoys = SDL_NumJoysticks();
@ -31,13 +31,13 @@ void djui_panel_controls_create(struct DjuiBase* caller) {
sprintf(&gamepadChoicesLong[index], "%d", i);
gamepadChoices[i] = &gamepadChoicesLong[index];
}
djui_selectionbox_create(body, "Gamepad", gamepadChoices, numJoys, &configGamepadNumber, NULL);
djui_selectionbox_create(body, DLANG(CONTROLS, GAMEPAD), gamepadChoices, numJoys, &configGamepadNumber, NULL);
#endif
djui_slider_create(body, "Deadzone", &configStickDeadzone, 0, 100, djui_panel_controls_value_change);
djui_slider_create(body, "Rumble Strength", &configRumbleStrength, 0, 100, djui_panel_controls_value_change);
djui_slider_create(body, DLANG(CONTROLS, DEADZONE), &configStickDeadzone, 0, 100, djui_panel_controls_value_change);
djui_slider_create(body, DLANG(CONTROLS, RUMBLE_STRENGTH), &configRumbleStrength, 0, 100, djui_panel_controls_value_change);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -4,7 +4,7 @@
void djui_panel_controls_extra_create(struct DjuiBase* caller) {
f32 bindBodyHeight = 28 * 8 + 1 * 7;
struct DjuiThreePanel* panel = djui_panel_menu_create("CONTROLS");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CONTROLS, CONTROLS));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
struct DjuiFlowLayout* bindBody = djui_flow_layout_create(body);
@ -13,17 +13,17 @@ void djui_panel_controls_extra_create(struct DjuiBase* caller) {
djui_base_set_color(&bindBody->base, 0, 0, 0, 0);
djui_flow_layout_set_margin(bindBody, 1);
{
djui_bind_create(&bindBody->base, "Chat", configKeyChat);
djui_bind_create(&bindBody->base, "Players", configKeyPlayerList);
djui_bind_create(&bindBody->base, "D Up", configKeyDUp);
djui_bind_create(&bindBody->base, "D Down", configKeyDDown);
djui_bind_create(&bindBody->base, "D Left", configKeyDLeft);
djui_bind_create(&bindBody->base, "D Right", configKeyDRight);
djui_bind_create(&bindBody->base, "X", configKeyX);
djui_bind_create(&bindBody->base, "Y", configKeyY);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, CHAT), configKeyChat);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, PLAYERS), configKeyPlayerList);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, D_UP), configKeyDUp);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, D_DOWN), configKeyDDown);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, D_LEFT), configKeyDLeft);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, D_RIGHT), configKeyDRight);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, X), configKeyX);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, Y), configKeyY);
}
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -4,7 +4,7 @@
void djui_panel_controls_n64_create(struct DjuiBase* caller) {
f32 bindBodyHeight = 28 * 14 + 1 * 13;
struct DjuiThreePanel* panel = djui_panel_menu_create("CONTROLS");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CONTROLS, CONTROLS));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
struct DjuiFlowLayout* bindBody = djui_flow_layout_create(body);
@ -13,23 +13,23 @@ void djui_panel_controls_n64_create(struct DjuiBase* caller) {
djui_base_set_color(&bindBody->base, 0, 0, 0, 0);
djui_flow_layout_set_margin(bindBody, 1);
{
djui_bind_create(&bindBody->base, "Up", configKeyStickUp);
djui_bind_create(&bindBody->base, "Down", configKeyStickDown);
djui_bind_create(&bindBody->base, "Left", configKeyStickLeft);
djui_bind_create(&bindBody->base, "Right", configKeyStickRight);
djui_bind_create(&bindBody->base, "A", configKeyA);
djui_bind_create(&bindBody->base, "B", configKeyB);
djui_bind_create(&bindBody->base, "Start", configKeyStart);
djui_bind_create(&bindBody->base, "L", configKeyL);
djui_bind_create(&bindBody->base, "R", configKeyR);
djui_bind_create(&bindBody->base, "Z", configKeyZ);
djui_bind_create(&bindBody->base, "C Up", configKeyCUp);
djui_bind_create(&bindBody->base, "C Down", configKeyCDown);
djui_bind_create(&bindBody->base, "C Left", configKeyCLeft);
djui_bind_create(&bindBody->base, "C Right", configKeyCRight);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, UP), configKeyStickUp);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, DOWN), configKeyStickDown);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, LEFT), configKeyStickLeft);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, RIGHT), configKeyStickRight);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, A), configKeyA);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, B), configKeyB);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, START), configKeyStart);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, L), configKeyL);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, R), configKeyR);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, Z), configKeyZ);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, C_UP), configKeyCUp);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, C_DOWN), configKeyCDown);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, C_LEFT), configKeyCLeft);
djui_bind_create(&bindBody->base, DLANG(CONTROLS, C_RIGHT), configKeyCRight);
}
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -27,24 +27,24 @@ static void djui_panel_display_frame_limit_text_change(struct DjuiBase* caller)
}
void djui_panel_display_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("DISPLAY");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(DISPLAY, DISPLAY));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
djui_checkbox_create(body, "Fullscreen", &configWindow.fullscreen, djui_panel_display_apply);
djui_checkbox_create(body, DLANG(DISPLAY, FULLSCREEN), &configWindow.fullscreen, djui_panel_display_apply);
#ifdef EXTERNAL_DATA
djui_checkbox_create(body, "Preload Textures", &configPrecacheRes, NULL);
djui_checkbox_create(body, DLANG(DISPLAY, PRELOAD_TEXTURES), &configPrecacheRes, NULL);
#endif
djui_checkbox_create(body, "VSync", &configWindow.vsync, djui_panel_display_apply);
djui_checkbox_create(body, "Uncapped Framerate", &configUncappedFramerate, djui_panel_display_apply);
djui_checkbox_create(body, DLANG(DISPLAY, VSYNC), &configWindow.vsync, djui_panel_display_apply);
djui_checkbox_create(body, DLANG(DISPLAY, UNCAPPED_FRAMERATE), &configUncappedFramerate, djui_panel_display_apply);
struct DjuiRect* rect1 = djui_rect_container_create(body, 32);
{
if (configFrameLimit < 30) { configFrameLimit = 30; }
if (configFrameLimit > 3000) { configFrameLimit = 3000; }
struct DjuiText* text1 = djui_text_create(&rect1->base, "Frame Limit");
struct DjuiText* text1 = djui_text_create(&rect1->base, DLANG(DISPLAY, FRAME_LIMIT));
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_color(&text1->base, 200, 200, 200, 255);
djui_base_set_size(&text1->base, 0.485f, 64);
@ -62,20 +62,20 @@ void djui_panel_display_create(struct DjuiBase* caller) {
sFrameLimitInput = inputbox1;
}
char* interpChoices[2] = { "Fast", "Accurate" };
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, "Interpolation", interpChoices, 2, &configInterpolationMode, NULL);
char* interpChoices[2] = { DLANG(DISPLAY, FAST), DLANG(DISPLAY, ACCURATE) };
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, DLANG(DISPLAY, INTERPOLATION), interpChoices, 2, &configInterpolationMode, NULL);
djui_base_set_enabled(&selectionbox1->base, (configFrameLimit > 30 || (configFrameLimit <= 30 && configUncappedFramerate)));
sInterpolationSelectionBox = selectionbox1;
char* filterChoices[3] = { "Nearest", "Linear", "Tripoint" };
djui_selectionbox_create(body, "Filtering", filterChoices, 3, &configFiltering, NULL);
char* filterChoices[3] = { DLANG(DISPLAY, NEAREST), DLANG(DISPLAY, LINEAR), DLANG(DISPLAY, TRIPOINT) };
djui_selectionbox_create(body, DLANG(DISPLAY, FILTERING), filterChoices, 3, &configFiltering, NULL);
char* drawDistanceChoices[6] = { "0.5x", "1x", "1.5x", "3x", "10x", "100x" };
djui_selectionbox_create(body, "Draw Distance", drawDistanceChoices, 6, &configDrawDistance, NULL);
char* drawDistanceChoices[6] = { DLANG(DISPLAY, D0P5X), DLANG(DISPLAY, D1X), DLANG(DISPLAY, D1P5X), DLANG(DISPLAY, D3X), DLANG(DISPLAY, D10X), DLANG(DISPLAY, D100X) };
djui_selectionbox_create(body, DLANG(DISPLAY, DRAW_DISTANCE), drawDistanceChoices, 6, &configDrawDistance, NULL);
djui_button_create(body, "DynOS Packs", DJUI_BUTTON_STYLE_NORMAL, djui_panel_dynos_create);
djui_button_create(body, DLANG(DISPLAY, DYNOS_PACKS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_dynos_create);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -9,7 +9,7 @@ static void djui_panel_dynos_apply(struct DjuiBase* caller) {
void djui_panel_dynos_create(struct DjuiBase* caller) {
int packCount = dynos_pack_get_count();
struct DjuiThreePanel* panel = djui_panel_menu_create("DYNOS");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(DYNOS, DYNOS));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
@ -26,7 +26,7 @@ void djui_panel_dynos_create(struct DjuiBase* caller) {
}
djui_paginated_calculate_height(paginated);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
panel->bodySize.value = paginated->base.height.value + 16 + 64;
}

View file

@ -67,13 +67,13 @@ static void djui_panel_host_do_host(struct DjuiBase* caller) {
void djui_panel_host_create(struct DjuiBase* caller) {
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create((gNetworkType == NT_SERVER)
? "SERVER"
: "HOST");
? DLANG(HOST, SERVER_TITLE)
: DLANG(HOST, HOST_TITLE));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
#ifdef DISCORD_SDK
char* nChoices[2] = { "Discord", "Direct Connection" };
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, "Network system", nChoices, 2, &configNetworkSystem, djui_panel_host_network_system_change);
char* nChoices[2] = { DLANG(HOST, DISCORD), DLANG(HOST, DIRECT_CONNECTION) };
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, DLANG(HOST, NETWORK_SYSTEM), nChoices, 2, &configNetworkSystem, djui_panel_host_network_system_change);
if (gNetworkType == NT_SERVER) {
djui_base_set_enabled(&selectionbox1->base, false);
}
@ -82,7 +82,7 @@ void djui_panel_host_create(struct DjuiBase* caller) {
struct DjuiRect* rect1 = djui_rect_container_create(body, 32);
{
struct DjuiText* text1 = djui_text_create(&rect1->base, "Port");
struct DjuiText* text1 = djui_text_create(&rect1->base, DLANG(HOST, PORT));
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_color(&text1->base, 200, 200, 200, 255);
djui_base_set_size(&text1->base, 0.485f, 64);
@ -111,7 +111,7 @@ void djui_panel_host_create(struct DjuiBase* caller) {
struct DjuiRect* rect2 = djui_rect_container_create(body, 32);
{
struct DjuiText* text1 = djui_text_create(&rect2->base, "Save Slot");
struct DjuiText* text1 = djui_text_create(&rect2->base, DLANG(HOST, SAVE_SLOT));
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_color(&text1->base, 200, 200, 200, 255);
djui_base_set_size(&text1->base, 0.485f, 64);
@ -124,21 +124,21 @@ void djui_panel_host_create(struct DjuiBase* caller) {
djui_base_set_alignment(&button1->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
}
djui_button_create(body, "Settings", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_settings_create);
djui_button_create(body, DLANG(HOST, SETTINGS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_settings_create);
struct DjuiButton* button2 = djui_button_create(body, "Mods", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create);
struct DjuiButton* button2 = djui_button_create(body, DLANG(HOST, MODS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create);
button2->base.tag = 0;
struct DjuiButton* button3 = djui_button_create(body, "Rom-Hacks", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create);
struct DjuiButton* button3 = djui_button_create(body, DLANG(HOST, ROMHACKS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create);
button3->base.tag = 1;
struct DjuiRect* rect3 = djui_rect_container_create(body, 64);
{
struct DjuiButton* button1 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Cancel" : "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
struct DjuiButton* button1 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? DLANG(MENU, CANCEL) : DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_base_set_size(&button1->base, 0.485f, 64);
djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP);
struct DjuiButton* button2 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Apply" : "Host", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_do_host);
struct DjuiButton* button2 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? DLANG(HOST, APPLY) : DLANG(HOST, HOST), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_do_host);
djui_base_set_size(&button2->base, 0.485f, 64);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);

View file

@ -11,22 +11,6 @@
#include "audio/external.h"
#include "sounds.h"
#ifdef DISCORD_SDK
static char* sWarningDiscord = "\
Invite friends by right clicking their name on Discord and clicking on\n\
'\\#d0d0ff\\Invite to Game\\#c8c8c8\\'.\n\n\
You can invite channels of servers as well by clicking the \\#d0d0ff\\plus\\#c8c8c8\\ button next to the place where you enter chat.\n\n\
Game Activity \\#ffa0a0\\must be\\#c8c8c8\\ enabled in your\nDiscord user settings.\n\n\
Appearing offline \\#ffa0a0\\will prevent\\#c8c8c8\\ invites from being sent.\
";
static char* sWarningDiscord2 = "\\#ffa0a0\\Error:\\#c8c8c8\\ Could not detect Discord.\n\n\\#a0a0a0\\Try closing the game,\nrestarting Discord,\nand opening the game again.";
#endif
static char* sWarningSocket = "\
Direct connections \\#ffa0a0\\require you\\#c8c8c8\\ to configure port forwarding in your router.\n\n\
Forward port '\\#d0d0ff\\%d\\#c8c8c8\\' for UDP.\
";
void djui_panel_do_host(void) {
stop_demo(NULL);
djui_panel_shutdown();
@ -72,19 +56,19 @@ void djui_panel_host_message_create(struct DjuiBase* caller) {
#ifdef DISCORD_SDK
if (!configNetworkSystem) {
warningLines = gDiscordFailed ? 5 : 13;
warningMessage = gDiscordFailed ? sWarningDiscord2 : sWarningDiscord;
warningMessage = gDiscordFailed ? DLANG(HOST_MESSAGE, WARN_DISCORD2) : DLANG(HOST_MESSAGE, WARN_DISCORD);
hideHostButton = gDiscordFailed;
} else
#endif
{
warningLines = 5;
warningMessage = calloc(256, sizeof(char));
sprintf(warningMessage, sWarningSocket, configHostPort);
sprintf(warningMessage, DLANG(HOST_MESSAGE, WARN_SOCKET), configHostPort);
}
f32 textHeight = 32 * 0.8125f * warningLines + 8;
struct DjuiThreePanel* panel = djui_panel_menu_create("INFO");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(HOST_MESSAGE, INFO_TITLE));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
struct DjuiText* text1 = djui_text_create(body, warningMessage);
@ -94,8 +78,8 @@ void djui_panel_host_message_create(struct DjuiBase* caller) {
struct DjuiRect* rect1 = djui_rect_container_create(body, 64);
{
struct DjuiButton* btnHost = djui_button_right_create(&rect1->base, "Host", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_message_do_host);
struct DjuiButton* btnBack = djui_button_left_create(&rect1->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
struct DjuiButton* btnHost = djui_button_right_create(&rect1->base, DLANG(HOST_MESSAGE, HOST), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_message_do_host);
struct DjuiButton* btnBack = djui_button_left_create(&rect1->base, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
if (hideHostButton) {
djui_base_set_size(&btnBack->base, 1.0f, 64);

View file

@ -91,8 +91,8 @@ void djui_panel_host_mods_create(struct DjuiBase* caller) {
mods_update_selectable();
struct DjuiThreePanel* panel = djui_panel_menu_create(isRomHacks
? "ROMHACKS"
: "MODS"
? DLANG(HOST_MODS, ROMHACKS)
: DLANG(HOST_MODS, MODS)
);
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
@ -111,7 +111,7 @@ void djui_panel_host_mods_create(struct DjuiBase* caller) {
}
djui_paginated_calculate_height(paginated);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
panel->bodySize.value = paginated->base.height.value + 16 + 64;
}

View file

@ -28,15 +28,15 @@ static void djui_panel_host_save_erase_yes(struct DjuiBase* caller) {
static void djui_panel_host_save_erase(struct DjuiBase* caller) {
sEraseButtonTag = caller->tag;
djui_panel_confirm_create(caller,
"\\#ff0800\\E\\#1be700\\R\\#00b3ff\\A\\#ffef00\\S\\#ff0800\\E",
"Are you sure you want to erase this save slot?",
DLANG(HOST_SAVE, ERASE_TITLE),
DLANG(HOST_SAVE, CONFIRM),
djui_panel_host_save_erase_yes);
}
void djui_panel_host_save_create(struct DjuiBase* caller) {
sSaveButtonCaller = caller;
struct DjuiThreePanel* panel = djui_panel_menu_create("SAVE");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(HOST_SAVE, SAVE_TITLE));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
for (int i = 0; i < 4; i++) {
@ -48,7 +48,7 @@ void djui_panel_host_save_create(struct DjuiBase* caller) {
button1->base.tag = i;
sSaveButtons[i] = button1;
struct DjuiButton* button2 = djui_button_create(&rect1->base, "erase", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_save_erase);
struct DjuiButton* button2 = djui_button_create(&rect1->base, DLANG(HOST_SAVE, ERASE), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_save_erase);
button2->base.tag = i;
djui_base_set_size(&button2->base, 0.24f, 32);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);

View file

@ -43,29 +43,29 @@ static void djui_panel_host_player_text_change(struct DjuiBase* caller) {
}
void djui_panel_host_settings_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("SETTINGS");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(HOST_SETTINGS, SETTINGS));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
char* iChoices[3] = { "Non-solid", "Solid", "Friendly Fire" };
djui_selectionbox_create(body, "Player interaction", iChoices, 3, &configPlayerInteraction, NULL);
char* iChoices[3] = { DLANG(HOST_SETTINGS, NONSOLID), DLANG(HOST_SETTINGS, SOLID), DLANG(HOST_SETTINGS, FRIENDLY_FIRE) };
djui_selectionbox_create(body, DLANG(HOST_SETTINGS, PLAYER_INTERACTION), iChoices, 3, &configPlayerInteraction, NULL);
sKnockbackIndex = (configPlayerKnockbackStrength <= 20)
? 0
: ((configPlayerKnockbackStrength <= 40) ? 1 : 2);
char* kChoices[3] = { "Weak", "Normal", "Too much" };
djui_selectionbox_create(body, "Knockback strength", kChoices, 3, &sKnockbackIndex, djui_panel_host_settings_knockback_change);
char* kChoices[3] = { DLANG(HOST_SETTINGS, WEAK), DLANG(HOST_SETTINGS, NORMAL), DLANG(HOST_SETTINGS, TOO_MUCH) };
djui_selectionbox_create(body, DLANG(HOST_SETTINGS, KNOCKBACK_STRENGTH), kChoices, 3, &sKnockbackIndex, djui_panel_host_settings_knockback_change);
char* lChoices[3] = { "Leave level", "Stay in level", "Non-stop" };
djui_selectionbox_create(body, "On star collection", lChoices, 3, &configStayInLevelAfterStar, NULL);
char* lChoices[3] = { DLANG(HOST_SETTINGS, LEAVE_LEVEL), DLANG(HOST_SETTINGS, STAY_IN_LEVEL), DLANG(HOST_SETTINGS, NONSTOP) };
djui_selectionbox_create(body, DLANG(HOST_SETTINGS, ON_STAR_COLLECTION), lChoices, 3, &configStayInLevelAfterStar, NULL);
djui_checkbox_create(body, "Skip intro cutscene", &configSkipIntro, NULL);
djui_checkbox_create(body, "Share lives", &configShareLives, NULL);
djui_checkbox_create(body, "Enable cheats", &configEnableCheats, NULL);
djui_checkbox_create(body, "Bubble on death", &configBubbleDeath, NULL);
djui_checkbox_create(body, DLANG(HOST_SETTINGS, SKIP_INTRO_CUTSCENE), &configSkipIntro, NULL);
djui_checkbox_create(body, DLANG(HOST_SETTINGS, SHARE_LIVES), &configShareLives, NULL);
djui_checkbox_create(body, DLANG(HOST_SETTINGS, ENABLE_CHEATS), &configEnableCheats, NULL);
djui_checkbox_create(body, DLANG(HOST_SETTINGS, BUBBLE_ON_DEATH), &configBubbleDeath, NULL);
struct DjuiRect* rect1 = djui_rect_container_create(body, 32);
{
struct DjuiText* text1 = djui_text_create(&rect1->base, "Amount of players");
struct DjuiText* text1 = djui_text_create(&rect1->base, DLANG(HOST_SETTINGS, AMOUNT_OF_PLAYERS));
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_color(&text1->base, 200, 200, 200, 255);
djui_base_set_size(&text1->base, 0.485f, 64);
@ -82,7 +82,7 @@ void djui_panel_host_settings_create(struct DjuiBase* caller) {
sPlayerAmount = inputbox1;
}
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);
}

View file

@ -7,18 +7,6 @@
#include "src/pc/configfile.h"
#include "src/pc/debuglog.h"
#ifdef DISCORD_SDK
static char* sJoiningDiscord = "\
To join a \\#d0d0ff\\Discord\\#c8c8c8\\ lobby:\n\n\
Keep the game open and click the join button on the invite.\n\n\
If the invite says that the game has ended, click the name of the person that sent the invite to refresh it.\
";
#endif
static char* sJoiningDirect = "\
Enter \\#d0d0ff\\direct connection\\#c8c8c8\\ IP and port:\
";
static struct DjuiInputbox* sInputboxIp = NULL;
static bool djui_panel_join_ip_parse_numbers(char** msg) {
@ -166,11 +154,11 @@ void djui_panel_join_create(struct DjuiBase* caller) {
#endif
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create("JOIN");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(JOIN, JOIN_TITLE));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
#ifdef DISCORD_SDK
struct DjuiText* text1 = djui_text_create(body, sJoiningDiscord);
struct DjuiText* text1 = djui_text_create(body, DLANG(JOIN, JOIN_DISCORD));
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&text1->base, 1.0f, discordTextHeight);
djui_base_set_color(&text1->base, 200, 200, 200, 255);
@ -180,7 +168,7 @@ void djui_panel_join_create(struct DjuiBase* caller) {
djui_base_set_size(&rect1->base, 1.0f, 2);
djui_base_set_color(&rect1->base, 150, 150, 150, 255);
struct DjuiText* text2 = djui_text_create(body, sJoiningDirect);
struct DjuiText* text2 = djui_text_create(body, DLANG(JOIN, JOIN_SOCKET));
djui_base_set_size_type(&text2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&text2->base, 1.0f, directTextHeight);
djui_base_set_color(&text2->base, 200, 200, 200, 255);
@ -194,11 +182,11 @@ void djui_panel_join_create(struct DjuiBase* caller) {
struct DjuiRect* rect2 = djui_rect_container_create(body, 64);
{
struct DjuiButton* button1 = djui_button_create(&rect2->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
struct DjuiButton* button1 = djui_button_create(&rect2->base, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_base_set_size(&button1->base, 0.485f, 64);
djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP);
struct DjuiButton* button2 = djui_button_create(&rect2->base, "Join", DJUI_BUTTON_STYLE_NORMAL, djui_panel_join_do_join);
struct DjuiButton* button2 = djui_button_create(&rect2->base, DLANG(JOIN, JOIN), DJUI_BUTTON_STYLE_NORMAL, djui_panel_join_do_join);
djui_base_set_size(&button2->base, 0.485f, 64);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
defaultBase = &button2->base;

View file

@ -47,7 +47,7 @@ void djui_panel_join_message_create(struct DjuiBase* caller) {
u16 directLines = 8;
f32 directTextHeight = 32 * 0.8125f * directLines + 8;
struct DjuiThreePanel* panel = djui_panel_menu_create("JOINING");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(JOIN_MESSAGE, JOINING));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
struct DjuiText* text1 = djui_text_create(body, "...");
@ -62,7 +62,7 @@ void djui_panel_join_message_create(struct DjuiBase* caller) {
gDownloadProgress = 0;
djui_progress_bar_create(body, &gDownloadProgress, 0.0f, 1.0f);
djui_button_create(body, "Cancel", DJUI_BUTTON_STYLE_BACK, djui_panel_join_message_cancel);
djui_button_create(body, DLANG(MENU, CANCEL), DJUI_BUTTON_STYLE_BACK, djui_panel_join_message_cancel);
}
djui_panel_add(caller, panel, NULL);

View file

@ -10,8 +10,8 @@ static void djui_panel_main_quit_yes(UNUSED struct DjuiBase* caller) {
static void djui_panel_main_quit(struct DjuiBase* caller) {
djui_panel_confirm_create(caller,
"QUIT",
"Are you sure you want to quit?",
DLANG(MAIN, QUIT_TITLE),
DLANG(MAIN, QUIT_CONFIRM),
djui_panel_main_quit_yes);
}
@ -20,12 +20,12 @@ void djui_panel_main_create(struct DjuiBase* caller) {
{
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
struct DjuiButton* button1 = djui_button_create(body, "Host", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_create);
struct DjuiButton* button1 = djui_button_create(body, DLANG(MAIN, HOST), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_create);
djui_cursor_input_controlled_center(&button1->base);
djui_button_create(body, "Join", DJUI_BUTTON_STYLE_NORMAL, djui_panel_join_create);
djui_button_create(body, "Options", DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_create);
djui_button_create(body, "Quit", DJUI_BUTTON_STYLE_BACK, djui_panel_main_quit);
djui_button_create(body, DLANG(MAIN, JOIN), DJUI_BUTTON_STYLE_NORMAL, djui_panel_join_create);
djui_button_create(body, DLANG(MAIN, OPTIONS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_create);
djui_button_create(body, DLANG(MAIN, QUIT), DJUI_BUTTON_STYLE_BACK, djui_panel_main_quit);
}
char* version = get_version_local();

View file

@ -10,7 +10,7 @@ static void djui_panel_random_menu(UNUSED struct DjuiBase* caller) {
}
void djui_panel_main_menu_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("MAIN MENU");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MENU_OPTIONS, MAIN_MENU));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
@ -33,15 +33,16 @@ void djui_panel_main_menu_create(struct DjuiBase* caller) {
"PSS",
"TTC",
};
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, "Level", levelChoices, 17, &configMenuLevel, NULL);
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, DLANG(MENU_OPTIONS, LEVEL), levelChoices, 17, &configMenuLevel, NULL);
djui_base_set_enabled(&selectionbox1->base, !configMenuRandom);
sLevelBox = selectionbox1;
djui_checkbox_create(body, "Use Stage Music", &configMenuSound, NULL);
djui_checkbox_create(body, "Random Stage", &configMenuRandom, djui_panel_random_menu);
djui_checkbox_create(body, "Play Vanilla Demos", &configMenuDemos, stop_demo);
djui_checkbox_create(body, DLANG(MENU_OPTIONS, USE_STAGE_MUSIC), &configMenuSound, NULL);
djui_checkbox_create(body, DLANG(MENU_OPTIONS, RANDOM_STAGE), &configMenuRandom, djui_panel_random_menu);
djui_checkbox_create(body, DLANG(MENU_OPTIONS, PLAY_VANILLA_DEMOS), &configMenuDemos, stop_demo);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -5,17 +5,17 @@
#ifdef DEVELOPMENT
void djui_panel_options_debug_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("DEBUG");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MISC, DEBUG_TITLE));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
djui_checkbox_create(body, "Fixed Collisions", (bool*)&gLevelValues.fixCollisionBugs, NULL);
djui_checkbox_create(body, "Lua Profiler", &configLuaProfiler, NULL);
djui_checkbox_create(body, "Debug Print", &configDebugPrint, NULL);
djui_checkbox_create(body, "Debug Info", &configDebugInfo, NULL);
djui_checkbox_create(body, "Debug Errors", &configDebugError, NULL);
djui_checkbox_create(body, DLANG(MISC, FIXED_COLLISIONS), (bool*)&gLevelValues.fixCollisionBugs, NULL);
djui_checkbox_create(body, DLANG(MISC, LUA_PROFILER), &configLuaProfiler, NULL);
djui_checkbox_create(body, DLANG(MISC, DEBUG_PRINT), &configDebugPrint, NULL);
djui_checkbox_create(body, DLANG(MISC, DEBUG_INFO), &configDebugInfo, NULL);
djui_checkbox_create(body, DLANG(MISC, DEBUG_ERRORS), &configDebugError, NULL);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);
@ -23,20 +23,17 @@ void djui_panel_options_debug_create(struct DjuiBase* caller) {
#endif
void djui_panel_misc_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("MISC");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MISC, MISC_TITLE));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
djui_checkbox_create(body, "Pause In Singleplayer", &configSingleplayerPause, NULL);
djui_checkbox_create(body, "Disable Popups", &configDisablePopups, NULL);
djui_button_create(body, "Menu Options", DJUI_BUTTON_STYLE_NORMAL, djui_panel_main_menu_create);
djui_checkbox_create(body, DLANG(MISC, PAUSE_IN_SINGLEPLAYER), &configSingleplayerPause, NULL);
djui_checkbox_create(body, DLANG(MISC, DISABLE_POPUPS), &configDisablePopups, NULL);
djui_button_create(body, DLANG(MISC, MENU_OPTIONS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_main_menu_create);
#ifdef DEVELOPMENT
djui_button_create(body, "Debug", DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_debug_create);
djui_button_create(body, DLANG(MISC, DEBUG), DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_debug_create);
#endif
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -20,7 +20,7 @@ void djui_panel_modlist_create(UNUSED struct DjuiBase* caller) {
if (gActiveMods.entryCount == 0) { return; }
f32 bodyHeight = (gActiveMods.entryCount * 32) + (gActiveMods.entryCount - 1) * 4;
struct DjuiThreePanel* panel = djui_panel_menu_create("MODS");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MODLIST, MODS));
djui_three_panel_set_body_size(panel, bodyHeight);
gDjuiModList = panel;

View file

@ -8,16 +8,16 @@ void djui_panel_options_back(struct DjuiBase* caller) {
}
void djui_panel_options_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("OPTIONS");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(OPTIONS, OPTIONS));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
djui_button_create(body, "Player", DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_create);
djui_button_create(body, "Camera", DJUI_BUTTON_STYLE_NORMAL, djui_panel_camera_create);
djui_button_create(body, "Controls", DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_create);
djui_button_create(body, "Display", DJUI_BUTTON_STYLE_NORMAL, djui_panel_display_create);
djui_button_create(body, "Sound", DJUI_BUTTON_STYLE_NORMAL, djui_panel_sound_create);
djui_button_create(body, "Misc", DJUI_BUTTON_STYLE_NORMAL, djui_panel_misc_create);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_options_back);
djui_button_create(body, DLANG(OPTIONS, PLAYER), DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_create);
djui_button_create(body, DLANG(OPTIONS, CAMERA), DJUI_BUTTON_STYLE_NORMAL, djui_panel_camera_create);
djui_button_create(body, DLANG(OPTIONS, CONTROLS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_create);
djui_button_create(body, DLANG(OPTIONS, DISPLAY), DJUI_BUTTON_STYLE_NORMAL, djui_panel_display_create);
djui_button_create(body, DLANG(OPTIONS, SOUND), DJUI_BUTTON_STYLE_NORMAL, djui_panel_sound_create);
djui_button_create(body, DLANG(OPTIONS, MISC), DJUI_BUTTON_STYLE_NORMAL, djui_panel_misc_create);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_options_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -22,13 +22,13 @@ static void djui_panel_pause_quit(struct DjuiBase* caller) {
if (gNetworkType == NT_SERVER) {
djui_panel_confirm_create(caller,
"QUIT",
"Are you sure you want to stop hosting?",
DLANG(PAUSE, QUIT_TITLE),
DLANG(PAUSE, QUIT_HOST),
djui_panel_pause_quit_yes);
} else {
djui_panel_confirm_create(caller,
"QUIT",
"Are you sure you want to disconnect?",
DLANG(PAUSE, QUIT_TITLE),
DLANG(PAUSE, QUIT_CLIENT),
djui_panel_pause_quit_yes);
}
}
@ -37,33 +37,33 @@ void djui_panel_pause_create(struct DjuiBase* caller) {
if (gDjuiChatBoxFocus) { djui_chat_box_toggle(); }
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create("PAUSE");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(PAUSE, PAUSE_TITLE));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
struct DjuiRect* rect1 = djui_rect_container_create(body, 64);
{
djui_button_left_create(&rect1->base, "Player", DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_create);
djui_button_right_create(&rect1->base, "DynOS Packs", DJUI_BUTTON_STYLE_NORMAL, djui_panel_dynos_create);
djui_button_left_create(&rect1->base, DLANG(PAUSE, PLAYER), DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_create);
djui_button_right_create(&rect1->base, DLANG(PAUSE, DYNOS_PACKS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_dynos_create);
}
struct DjuiButton* button3 = djui_button_create(body, "Options", DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_create);
struct DjuiButton* button3 = djui_button_create(body, DLANG(PAUSE, OPTIONS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_create);
defaultBase = &button3->base;
if (gServerSettings.enableCheats) {
djui_button_create(body, "Cheats", DJUI_BUTTON_STYLE_NORMAL, djui_panel_cheats_create);
djui_button_create(body, DLANG(PAUSE, CHEATS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_cheats_create);
}
if (gNetworkType == NT_SERVER) {
djui_button_create(body, "Server Settings", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_create);
djui_button_create(body, DLANG(PAUSE, SERVER_SETTINGS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_create);
}
djui_button_create(body, "Resume", DJUI_BUTTON_STYLE_NORMAL, djui_panel_pause_resume);
djui_button_create(body, DLANG(PAUSE, RESUME), DJUI_BUTTON_STYLE_NORMAL, djui_panel_pause_resume);
if (gNetworkType == NT_SERVER) {
djui_button_create(body, "Stop Hosting", DJUI_BUTTON_STYLE_BACK, djui_panel_pause_quit);
djui_button_create(body, DLANG(PAUSE, STOP_HOSTING), DJUI_BUTTON_STYLE_BACK, djui_panel_pause_quit);
} else {
djui_button_create(body, "Disconnect", DJUI_BUTTON_STYLE_BACK, djui_panel_pause_quit);
djui_button_create(body, DLANG(PAUSE, DISCONNECT), DJUI_BUTTON_STYLE_BACK, djui_panel_pause_quit);
}
}

View file

@ -114,9 +114,9 @@ void djui_panel_player_edit_palette_destroy(struct DjuiBase* caller) {
}
static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) {
char* sPartStrings[PLAYER_PART_MAX] = { "Overalls", "Shirt", "Gloves", "Shoes", "Hair", "Skin", "Cap" };
char* sPartStrings[PLAYER_PART_MAX] = { DLANG(PLAYER, OVERALLS), DLANG(PLAYER, SHIRT), DLANG(PLAYER, GLOVES), DLANG(PLAYER, SHOES), DLANG(PLAYER, HAIR), DLANG(PLAYER, SKIN), DLANG(PLAYER, CAP) };
struct DjuiThreePanel* panel = djui_panel_menu_create("PALETTE");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(PLAYER, PALETTE));
// Set current palette to custom when clicking on Edit Palette
sPalettePresetIndex = PALETTE_CUSTOM;
@ -132,11 +132,11 @@ static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) {
{
sCurrentPlayerPart = SHIRT;
djui_selectionbox_create(body, "Part", sPartStrings, PLAYER_PART_MAX, &sCurrentPlayerPart, djui_panel_player_edit_palette_part_changed);
djui_selectionbox_create(body, DLANG(PLAYER, PART), sPartStrings, PLAYER_PART_MAX, &sCurrentPlayerPart, djui_panel_player_edit_palette_part_changed);
struct DjuiRect* rect1 = djui_rect_container_create(body, 32);
{
struct DjuiText* text1 = djui_text_create(&rect1->base, "Hex Code");
struct DjuiText* text1 = djui_text_create(&rect1->base, DLANG(PLAYER, HEX_CODE));
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_color(&text1->base, 200, 200, 200, 255);
djui_base_set_size(&text1->base, 0.485f, 64);
@ -152,11 +152,11 @@ static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) {
for (int i = 0; i < 3; i++) sSliderChannels[i] = configCustomPalette.parts[SHIRT][i];
sSliderR = djui_slider_create(body, "Red", &sSliderChannels[0], 0, 255, djui_panel_player_edit_palette_red_changed);
sSliderG = djui_slider_create(body, "Green", &sSliderChannels[1], 0, 255, djui_panel_player_edit_palette_green_changed);
sSliderB = djui_slider_create(body, "Blue", &sSliderChannels[2], 0, 255, djui_panel_player_edit_palette_blue_changed);
sSliderR = djui_slider_create(body, DLANG(PLAYER, RED), &sSliderChannels[0], 0, 255, djui_panel_player_edit_palette_red_changed);
sSliderG = djui_slider_create(body, DLANG(PLAYER, GREEN), &sSliderChannels[1], 0, 255, djui_panel_player_edit_palette_green_changed);
sSliderB = djui_slider_create(body, DLANG(PLAYER, BLUE), &sSliderChannels[2], 0, 255, djui_panel_player_edit_palette_blue_changed);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);
@ -186,7 +186,7 @@ static void djui_panel_player_name_text_change(struct DjuiBase* caller) {
static void djui_panel_player_name_on_focus_end(struct DjuiBase* caller) {
struct DjuiInputbox* inputbox1 = (struct DjuiInputbox*)caller;
if (!djui_panel_player_name_valid(inputbox1->buffer)) {
djui_inputbox_set_text(inputbox1, "Player");
djui_inputbox_set_text(inputbox1, DLANG(PLAYER, PLAYER));
}
snprintf(configPlayerName, 20, "%s", inputbox1->buffer);
djui_inputbox_set_text_color(inputbox1, 0, 0, 0, 255);
@ -231,13 +231,13 @@ void djui_panel_player_create(struct DjuiBase* caller) {
djui_panel_player_prevent_demo(NULL);
gInPlayerMenu = true;
struct DjuiThreePanel* panel = djui_panel_menu_create("PLAYER");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(PLAYER, PLAYER_TITLE));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
struct DjuiRect* rect1 = djui_rect_container_create(body, 32);
{
struct DjuiText* text1 = djui_text_create(&rect1->base, "Name");
struct DjuiText* text1 = djui_text_create(&rect1->base, DLANG(PLAYER, NAME));
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_color(&text1->base, 200, 200, 200, 255);
djui_base_set_size(&text1->base, 0.485f, 64);
@ -250,7 +250,7 @@ void djui_panel_player_create(struct DjuiBase* caller) {
if (djui_panel_player_name_valid(configPlayerName)) {
djui_inputbox_set_text(inputbox1, configPlayerName);
} else {
djui_inputbox_set_text(inputbox1, "Player");
djui_inputbox_set_text(inputbox1, DLANG(PLAYER, PLAYER));
}
djui_interactable_hook_value_change(&inputbox1->base, djui_panel_player_name_text_change);
djui_interactable_hook_focus(&inputbox1->base, NULL, NULL, djui_panel_player_name_on_focus_end);
@ -260,42 +260,42 @@ void djui_panel_player_create(struct DjuiBase* caller) {
for (int i = 0; i < CT_MAX; i++) {
modelChoices[i] = gCharacters[i].name;
}
djui_selectionbox_create(body, "Model", modelChoices, CT_MAX, &configPlayerModel, djui_panel_player_value_changed);
djui_selectionbox_create(body, DLANG(PLAYER, MODEL), modelChoices, CT_MAX, &configPlayerModel, djui_panel_player_value_changed);
char* paletteChoices[PALETTE_PRESET_MAX+1] = {
"Mario",
"Luigi",
"Waluigi",
"Wario",
"Chuckya",
"Goomba",
"Clover",
"Cobalt",
"Fury",
"Hot Pink",
"Nice Pink",
"Seafoam",
"Lilac",
"Copper",
"Azure",
"Burgundy",
"Mint",
"Eggplant",
"Orange",
"Arctic",
"Fire Mario",
"Fire Luigi",
"Fire Waluigi",
"Fire Wario",
"Busy Bee",
"Fortress",
"Battlements",
"Blueberry Pie",
"Raspberry",
"Bubblegum",
"Ice Mario",
"Ice Luigi",
"Custom",
DLANG(PALETTE, MARIO),
DLANG(PALETTE, LUIGI),
DLANG(PALETTE, WALUIGI),
DLANG(PALETTE, WARIO),
DLANG(PALETTE, CHUCKYA),
DLANG(PALETTE, GOOMBA),
DLANG(PALETTE, CLOVER),
DLANG(PALETTE, COBALT),
DLANG(PALETTE, FURY),
DLANG(PALETTE, HOT_PINK),
DLANG(PALETTE, NICE_PINK),
DLANG(PALETTE, SEAFOAM),
DLANG(PALETTE, LILAC),
DLANG(PALETTE, COPPER),
DLANG(PALETTE, AZURE),
DLANG(PALETTE, BURGUNDY),
DLANG(PALETTE, MINT),
DLANG(PALETTE, EGGPLANT),
DLANG(PALETTE, ORANGE),
DLANG(PALETTE, ARCTIC),
DLANG(PALETTE, FIRE_MARIO),
DLANG(PALETTE, FIRE_LUIGI),
DLANG(PALETTE, FIRE_WALUIGI),
DLANG(PALETTE, FIRE_WARIO),
DLANG(PALETTE, BUSY_BEE),
DLANG(PALETTE, FORTRESS),
DLANG(PALETTE, BATTLEMENTS),
DLANG(PALETTE, BLUEBERRY_PIE),
DLANG(PALETTE, RASPBERRY),
DLANG(PALETTE, BUBBLEGUM),
DLANG(PALETTE, ICE_MARIO),
DLANG(PALETTE, ICE_LUIGI),
DLANG(PALETTE, CUSTOM),
};
for (int i = 0; i < PALETTE_PRESET_MAX; i++) {
@ -305,10 +305,10 @@ void djui_panel_player_create(struct DjuiBase* caller) {
}
}
sPalettePresetSelection = djui_selectionbox_create(body, "Palette Preset", paletteChoices, PALETTE_PRESET_MAX+1, &sPalettePresetIndex, djui_panel_player_value_changed);
sPalettePresetSelection = djui_selectionbox_create(body, DLANG(PLAYER, PALETTE_PRESET), paletteChoices, PALETTE_PRESET_MAX+1, &sPalettePresetIndex, djui_panel_player_value_changed);
djui_button_create(body, "Edit Palette", DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_edit_palette_create);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_button_create(body, DLANG(PLAYER, EDIT_PALETTE), DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_edit_palette_create);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
struct DjuiPanel* p = djui_panel_add(caller, panel, NULL);

View file

@ -66,7 +66,7 @@ void djui_panel_playerlist_on_render_pre(UNUSED struct DjuiBase* base, UNUSED bo
void djui_panel_playerlist_create(UNUSED struct DjuiBase* caller) {
f32 bodyHeight = (MAX_PLAYERS * 32) + (MAX_PLAYERS - 1) * 4;
struct DjuiThreePanel* panel = djui_panel_menu_create("PLAYERS");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(PLAYER_LIST, PLAYERS));
djui_three_panel_set_body_size(panel, bodyHeight);
gDjuiPlayerList = panel;
panel->base.on_render_pre = djui_panel_playerlist_on_render_pre;
@ -94,7 +94,7 @@ void djui_panel_playerlist_create(UNUSED struct DjuiBase* caller) {
djuiImages[i] = i1;
int t = 220;
struct DjuiText* t2 = djui_text_create(&row->base, "name");
struct DjuiText* t2 = djui_text_create(&row->base, DLANG(PLAYER_LIST, NAME));
djui_base_set_size_type(&t2->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&t2->base, 180, 32.0f);
djui_base_set_color(&t2->base, t, t, t, 255);
@ -107,14 +107,14 @@ void djui_panel_playerlist_create(UNUSED struct DjuiBase* caller) {
djui_text_set_alignment(t3, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP);
djuiTextDescriptions[i] = t3;
struct DjuiText* t4 = djui_text_create(&row->base, "location");
struct DjuiText* t4 = djui_text_create(&row->base, DLANG(PLAYER_LIST, LOCATION));
djui_base_set_size_type(&t4->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&t4->base, 300 - 100, 32.0f);
djui_base_set_color(&t4->base, t, t, t, 255);
djui_text_set_alignment(t4, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
djuiTextLocations[i] = t4;
struct DjuiText* t5 = djui_text_create(&row->base, "act");
struct DjuiText* t5 = djui_text_create(&row->base, DLANG(PLAYER_LIST, ACT));
djui_base_set_size_type(&t5->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&t5->base, 100, 32.0f);
djui_base_set_color(&t5->base, t, t, t, 255);

View file

@ -3,15 +3,15 @@
#include "src/pc/configfile.h"
void djui_panel_sound_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create("SOUND");
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(SOUND, SOUND));
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
djui_slider_create(body, "Master Volume", &configMasterVolume, 0, 127, NULL);
djui_slider_create(body, "Music Volume", &configMusicVolume, 0, 127, NULL);
djui_slider_create(body, "Sfx Volume", &configSfxVolume, 0, 127, NULL);
djui_slider_create(body, "Env Volume", &configEnvVolume, 0, 127, NULL);
djui_button_create(body, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_slider_create(body, DLANG(SOUND, MASTER_VOLUME), &configMasterVolume, 0, 127, NULL);
djui_slider_create(body, DLANG(SOUND, MUSIC_VOLUME), &configMusicVolume, 0, 127, NULL);
djui_slider_create(body, DLANG(SOUND, SFX_VOLUME), &configSfxVolume, 0, 127, NULL);
djui_slider_create(body, DLANG(SOUND, ENV_VOLUME), &configEnvVolume, 0, 127, NULL);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, panel, NULL);

View file

@ -273,6 +273,7 @@ void main_func(void) {
const char *userpath = gCLIOpts.SavePath[0] ? gCLIOpts.SavePath : sys_user_path();
fs_init(sys_ropaths, gamedir, userpath);
djui_language_init("english.ini");
sync_objects_init_system();
djui_unicode_init();
mods_init();