XGravity/Public/ecma/Utils/Settings.ecma.js

390 lines
16 KiB
JavaScript

"use strict";
/** @type {Dictionary.<string, any|null>} */
const settings = {
cells : 40,
position : "body",
class_name : "xgravity",
frames_per_second : 12,
language : "espanol",
show_fps : true,
// Configuraciones de juego y pantalla
canvas_quality : 100,
action_key : "Space",
background_mode : "procedural", // "image" | "stars" | "procedural"
// Parámetros para fondo con imagen ("image")
// bg_image_url : "https://images.unsplash.com/photo-1506703719100-a0f3a48c0f86?q=80&w=1600&auto=format&fit=crop",
bg_image_url : "images/backgrounds/photo-1506703719100-a0f3a48c0f86.jpeg",
bg_image_pan_speed_x : 5, // px por segundo (0 para totalmente estático)
bg_image_pan_speed_y : 2,
// Parámetros para el generador de estrellas ("stars")
bg_stars_count : 140,
bg_stars_size_min : 0.5,
bg_stars_size_max : 2.2,
bg_stars_speed_min : 0.1,
bg_stars_speed_max : 0.6,
bg_stars_dir_x : 0, // -1 (izq) a 1 (der)
bg_stars_dir_y : 1, // -1 (arriba) a 1 (abajo)
bg_stars_color : "rgba(186, 230, 253, {alpha})",
// Paŕametros para fondo dinámico.
bg_procedural_far_stars : {
probablity : .96,
size : [.2, .7],
images : [
"images/game/Far-Star-1.webp",
"images/game/Far-Star-2.webp",
"images/game/Far-Star-3.webp"
]
},
bg_procedural_nebulas : {
probablity : .87,
size : [3, 60],
images : [
"images/game/Blue-Dust.webp",
"images/game/Cold-Nebula.webp",
"images/game/Dust.webp",
"images/game/Grey-Asteroid-Dust.webp",
"images/game/Hot-Nebula.webp",
"images/game/Violet-Dust.webp",
"images/game/Yellow-Dust.webp"
]
},
bg_procedural_near_stars : {
probablity : .21,
size : [.5, 1.7],
images : [
"images/game/Layer.webp",
"images/game/Layer2.webp"
],
},
bg_procedural_suns : {
probablity : .32,
timer : [2, 10],
size : [10, 50],
images : [
"images/game/Sun.fixed.webp",
"images/game/Red-Giant.webp"
],
},
bg_procedural_planets : {
probablity : .17,
size : [7, 30],
images : [
"images/game/Ice-Giant.webp",
"images/game/Gas-Giant.webp",
"images/game/Exoplanet3.webp",
"images/game/Exoplanet2.webp",
"images/game/Exoplanet.webp"
]
},
// Configuración del Dron / Nave
drone_image : "images/game/Louse.webp",
drone_size : 2.5, // Tamaño en celdas (ancho/alto en base al grid de 40 celdas)
drone_gravity : 2.2, // Multiplicador de fuerza gravitatoria hacia el cursor
drone_friction : 0.985, // Fricción / inercia en el vacío (0 = freno total, 1 = inercia infinita)
// drone_max_speed : 25, // Velocidad máxima de seguridad en celdas/segundo
// drone_force : 1.2, // Multiplicador de fuerza f
// drone_max_speed : 28, // Límite máximo en celdas/segundo
// Ajustes de física del dron
drone_force : 3, // Multiplicador fx y fy
drone_max_accel : 35, // Tope del acumulador ax y ay
// Configuración del Escudo Activo
drone_shield_drain : 25, // Consumo por segundo al mantener pulsado (0 a 100)
drone_shield_recovery : 12, // Recuperación por segundo en reposo
drone_shield_radius : 1.7, // Radio del escudo en celdas (alrededor del dron)
// Alerta de Escudo Bajo en el Dron
// drone_shield_low_threshold : 25, // Porcentaje a partir del cual salta la alarma (<= 25%)
// drone_shield_alarm_interval : 0.75, // Intervalo de repetición del sonido de alarma (segundos)
// drone_shield_beacon_speed : 6.0, // Velocidad de giro del girofaro (radianes/segundo)
// Alarma de Escudo Bajo estilo Alien (Klaxon)
drone_shield_low_threshold : 25, // Porcentaje crítico (<= 25%)
// drone_shield_alarm_interval : 0.22, // Cadencia rápida de repetición (segundos entre pulsos)
// drone_shield_beacon_speed : 9.5, // Girofaro acelerado al ritmo de la alarma
drone_shield_alarm_interval : 0.26, // Intervalo ajustado a la longitud del pulso
drone_shield_beacon_speed : 8.5, // Giro acompasado
// Curvas dinámicas de Alerta de Perímetro / Salida de Zona
drone_perimeter_safe_radius : 15.0, // Radio donde empieza la advertencia (celdas)
drone_perimeter_critical_radius : 18.5, // Radio límite antes de perder la nave (celdas)
drone_perimeter_alarm_interval_max : 0.7, // Intervalo al rozar las 15 celdas
drone_perimeter_alarm_interval_min : 0.2, // Intervalo al borde del límite fatal
// Gestión del Escudo del Dron
drone_shield_recharge_time : 20.0, // Segundos que tarda en recargar de 0 a 100%
drone_shield_kill_reward : 25.0, // Puntos de escudo recuperados al destruir un enemigo con el escudo
drone_shield_drain : 25.0, // Consumo de escudo por segundo mientras está activo
// Configuración de Enemigos
enemy_spawn_rate : 1.6, // Frecuencia de aparición (en segundos)
enemy_speed : 5.0, // Velocidad lineal en celdas por segundo
enemy_size : 2.2, // Tamaño en celdas
enemy_spawn_radius : 22.0, // Distancia radial de generación
enemy_score_value : 100, // Puntos al destruir un enemigo con el escudo
// Curva de dificultad y desbloqueo progresivo
enemy_spawn_interval : 0.1, // Frecuencia con la que se tira el dado (en segundos)
enemy_time_to_max_difficulty : 120, // Segundos hasta alcanzar el 100% del rango (0.11)
enemy_min_threshold : 0.04, // Umbral inicial (solo estáticos al arrancar)
enemy_max_threshold : 0.11, // Umbral máximo accesible
// Configuración de Entrada Táctica y Sobrevuelo
enemy_overflight_initial_scale : 120.0, // Escala inicial al sobrevolar desde atrás (ajústalo a tu gusto: 4.0, 6.0, 8.0...)
enemy_overflight_scale_speed : 1.8, // Velocidad con la que desciende hacia el plano de juego
// Duración de la retícula de triangulación táctica al aparecer cualquier enemigo (en segundos)
enemy_target_lock_duration : 1.2,
// Configuración de HUD de combate sobre enemigos
enemy_show_health_bars : true, // Activar/desactivar barras de vida
enemy_health_bar_width : 1.8, // Ancho de la barra en celdas
enemy_damage_popup_duration : 0.75, // Segundos que dura el texto flotante de daño
// Ajustes de sobrevuelo
enemy_overflight_initial_scale : 26.5, // Escala inicial
enemy_overflight_duration : 1.4, // Segundos exactos que tarda en alcanzar el plano 2D
// Configuración general de sobrevuelo
// Plantilla de enemigos
enemies_roster : [
{
id: "static_mine",
// range: [0.00, 0.04],
range: [0.07, 0.09],
image: "images/game/Cricket-Snipper.webp",
size: 2.0,
mass: 5.0, // Pesada, se mueve poco al impactar
health: 40, // Aguanta un toque suave o revienta si entras a toda velocidad
spawn_mode: "deep_space", // Crece de 0 a 1
behavior: "static",
points: 50
},
{
id: "bouncer",
range: [0.04, 0.07],
image: "images/game/Mantis-Hull.webp",
size: 2.2,
mass: 2.5, // Masa media, rebota bien
health: 60,
spawn_mode: "perimeter", // Entra desde el exterior
behavior: "bounce_screen", // Rebota en el área [-23, 23]
accel: 5.5, // Potencia con la que acelera al salir del frenado
turn_speed: 4.8, // Rapidez con la que vira su timón al borde
points: 100
},
{
id: "chaser",
// range: [0.07, 0.09],
range: [0.00, 0.04],
image: "images/game/Scarab-Hull.webp",
size: 1.8,
mass: 1.8, // Ligera y ágil
health: 30, // Frágil si la embistes con escudo
spawn_mode: ["overflight", "deep_space", "perimeter"],
behavior: "track_drone",
points: 150
},
{
id: "rusher",
range: [0.09, 0.11],
image: "images/game/Strange-Body.webp",
size: 1.5,
mass: 4.0, // Densidad alta: impacto como un misil
health: 20,
spawn_mode: "perimeter",
behavior: "cross_screen", // Cruza a toda mecha
points: 200
},
{
id: "asteroid",
range: [0.12, 0.16],
// Array de imágenes aleatorias:
image: [
"images/game/Grey-Asteroid-1.webp",
"images/game/Grey-Asteroid-2.webp",
"images/game/Grey-Asteroid-3.webp"
],
size: 2.4,
mass: 7.0,
health: 50,
spawn_mode: "perimeter",
behavior: "cross_screen",
mothership_damage: 25, // Daño directo base al casco
points: 80
},
{
id: "asteroid_thrower",
range: [0.16, 0.19],
image: [
"images/game/Locust-Hull.webp"
],
size: 2.0,
mass: 2.2,
health: 45,
spawn_mode: ["perimeter", "overflight"],
behavior: "thrower_ai",
turn_speed: 4.5,
max_speed: 4.8,
flee_distance: 7.5,
points: 250
}
],
// Configuración de Efectos de Explosión
explosion_particles_range : [45, 75], // Número aleatorio de partículas [mínimo, máximo]
explosion_particles_spread : 31.0, // Radio/fuerza de alcance de dispersión (celdas/s)
explosion_shockwave_radius : 14.5, // Radio máximo de la onda expansiva en celdas
explosion_volume : 3, // Volumen general de las explosiones (0.0 a 1.0)
// Balanceo dinámico de la cúpula e inercia de cabina
cockpit_drift_amount : 0.6, // Máximo desplazamiento en celdas por inercia del dron
cockpit_sway_speed : 0.8, // Velocidad del balanceo pasivo de respiración
// Screen Shake (Temblor de pantalla por explosiones)
screen_shake_shield_intensity : 0.25, // Intensidad al destruir con escudo (en celdas)
screen_shake_shield_duration : 0.15, // Duración sacudida de escudo (segundos)
screen_shake_hit_intensity : 0.85, // Intensidad al recibir impacto directo (en celdas)
screen_shake_hit_duration : 0.42, // Duración sacudida crítica (segundos)
// Factor de desplazamiento parallax del fondo estelar
background_parallax_amount : 0.25, // Intensidad del deslizamiento del fondo
// ==========================================
// SISTEMA DE DIFICULTAD Y MULTIPLICADORES
// ==========================================
current_difficulty : "average",
// Valores base del motor
base_enemy_spawn_interval : 0.65, // Segundos base entre chequeos de spawn
base_enemy_min_threshold : 0.04, // Probabilidad inicial de spawn
base_enemy_max_threshold : 0.22, // Límite asintótico de spawn
base_drone_shield_max : 100.0, // Capacidad base de escudo/vida del dron
base_drone_shield_drain_rate : 12.0, // Drenaje base por segundo activo
base_drone_shield_kill_reward : 10.0, // Recarga base al destruir con escudo
base_collision_damage_factor : 12.0, // Factor cinético base de daño
// Curva de progresión temporal asintótica
difficulty_ramp_half_life : 90.0, // Segundos para el 50% de la curva
difficulty_ramp_power : 1.25, // Exponente de aceleración (1.0 = lineal, >1.0 = agresivo)
// Catálogo de presets de dificultad (claves en inglés)
difficulty_presets : {
"training" : {
id : "training",
label_i18n : "diff_training",
spawn_interval_mult : 1.4,
min_threshold_mult : 0.5,
max_threshold_mult : 0.6,
ramp_speed_mult : 0.4,
shield_capacity_mult : 1.5,
shield_drain_mult : 0.6,
shield_reward_mult : 2.0,
drone_damage_taken_mult : 0.0, // Daño cero al dron
enemy_damage_taken_mult : 2.0,
mothership_damage_mult : 0.0, // ¡Inmortal!
mothership_repair_mult : 3.0,
drone_lives: 20,
mothership_damage_mult: 0.0,
},
"newbie" : {
id : "newbie",
label_i18n : "diff_newbie",
spawn_interval_mult : 1.25,
min_threshold_mult : 0.7,
max_threshold_mult : 0.75,
ramp_speed_mult : 0.6,
shield_capacity_mult : 1.3,
shield_drain_mult : 0.8,
shield_reward_mult : 1.5,
drone_damage_taken_mult : 0.4,
enemy_damage_taken_mult : 1.4,
mothership_damage_mult : 0.5,
mothership_repair_mult : 1.8,
drone_lives: 10,
mothership_damage_mult: 0.6,
},
"lazy" : {
id : "lazy",
label_i18n : "diff_lazy",
spawn_interval_mult : 1.1,
min_threshold_mult : 0.85,
max_threshold_mult : 0.9,
ramp_speed_mult : 0.8,
shield_capacity_mult : 1.15,
shield_drain_mult : 0.9,
shield_reward_mult : 1.2,
drone_damage_taken_mult : 0.7,
enemy_damage_taken_mult : 1.2,
mothership_damage_mult : 0.75,
mothership_repair_mult : 1.3,
drone_lives: 8,
mothership_damage_mult: 0.8,
},
"average" : {
id : "average",
label_i18n : "diff_average",
spawn_interval_mult : 1.0,
min_threshold_mult : 1.0,
max_threshold_mult : 1.0,
ramp_speed_mult : 1.0,
shield_capacity_mult : 1.0,
shield_drain_mult : 1.0,
shield_reward_mult : 1.0,
drone_damage_taken_mult : 1.0,
enemy_damage_taken_mult : 1.0,
mothership_damage_mult : 1.0,
mothership_repair_mult : 1.0,
drone_lives: 5,
mothership_damage_mult: 1,
},
"hard" : {
id : "hard",
label_i18n : "diff_hard",
spawn_interval_mult : 0.85,
min_threshold_mult : 1.2,
max_threshold_mult : 1.25,
ramp_speed_mult : 1.35,
shield_capacity_mult : 0.9,
shield_drain_mult : 1.2,
shield_reward_mult : 0.85,
drone_damage_taken_mult : 1.4,
enemy_damage_taken_mult : 0.85,
mothership_damage_mult : 1.35,
mothership_repair_mult : 0.6,
drone_lives: 3,
mothership_damage_mult: 1.5,
},
"berserk" : {
id : "berserk",
label_i18n : "diff_berserk",
spawn_interval_mult : 0.7,
min_threshold_mult : 1.5,
max_threshold_mult : 1.5,
ramp_speed_mult : 1.8,
shield_capacity_mult : 0.8,
shield_drain_mult : 1.4,
shield_reward_mult : 0.7,
drone_damage_taken_mult : 1.9,
enemy_damage_taken_mult : 0.75,
mothership_damage_mult : 1.8,
mothership_repair_mult : 0.3,
drone_lives: 2,
mothership_damage_mult: 2,
},
"insane" : {
id : "insane",
label_i18n : "diff_insane",
spawn_interval_mult : 0.5,
min_threshold_mult : 1.8,
max_threshold_mult : 1.8,
ramp_speed_mult : 2.5,
shield_capacity_mult : 0.7,
shield_drain_mult : 1.7,
shield_reward_mult : 0.5,
drone_damage_taken_mult : 2.6,
enemy_damage_taken_mult : 0.6,
mothership_damage_mult : 2.5, // 2 impactos = Game Over
mothership_repair_mult : 0.0, // Sin autoreparación
drone_lives: 1,
mothership_damage_mult: 2.5,
}
},
...(typeof custom_settings == "undefined" ? {} : custom_settings)
};