390 lines
16 KiB
JavaScript
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)
|
|
}; |