viernes, 30 de enero de 2026

Godot y html, prueba mi primera compilacion para jugar desde la web; Un juego de extraterrestres;

 


Este juego si lo descargais esta limpio, y es un juego corto pero completo y gratuito, esta es la primera compilacion para web que ago con Godot y funciona muy bien, en la version para html, salen unas barras en los personajes que no aparecen si  descargais el juego,    solo es una prueba para html y me gusta como salio, antes usaba Unity y me era mas facil en tema html, 2 años e tardado creo en poder publicar algo en html con Godot.....pero la constancia da frutos........


el secreto que empiece en index.html la cabecera de los archivos, que se compriman en zip seleccionandolos todos a la vez....no desde una carpeta...esto es importante y al subirlos a itch.io seleccionar para html y....bueno puedes preguntar a la IA de tu navegador ...asi aprendido yo hacerlo, y no superar los 200mg de peso........es ponerse.

miércoles, 28 de enero de 2026

Devlog; NOVEDADES JUEGO DEL ROBO DEL MUSEO;

https://perico415.itch.io/stealing-from-the-history-museum/devlog/1333944/especially-in-the-second-level-with-the-security-lasers 



28–01-2026

Publico los tres niveles del juego con el tiempo completo en cada uno de ellos, novedades sobre todo en el nivel segundo con los láseres de seguridad, para desactivarlos hay mas dificultad porque hay que disparar a elementos cúbicos que se zarandean por el aire y hace mas dificultoso, pero también mas divertido este nivel, cuando pasas al nivel tercero, para pasar hay que lanzar bombas de mano a la puerta a una distancia prudencial, hay novedades también en este nivel ampliado un poquito los turistas y efecto de flas fotográfico, van arriba y abajo locos perdidos haciendo fotos a lo loco, esta muy verde este tercer nivel, pero yo lo muestro para el  que quiera curiosear…….


AVENTURA



Curioso GDScript de Godot 4.5 que imita un fogonazo de camara fotografica; Para un OmniLight3D;

 extends OmniLight3D


@export var energia_maxima : float = 10.0  # Potencia del flash

@export var tiempo_espera : float = 10.0   # Cada cuánto dispara

@export var velocidad_apagado : float = 5.0 # Suavidad al apagarse


func _ready():

# Ponemos la luz a cero al empezar

light_energy = 0.0

# Iniciamos el bucle de fotos

_hacer_foto()


func _process(delta):

# Si la luz está encendida, que se vaya apagando poco a poco

if light_energy > 0:

light_energy = lerp(light_energy, 0.0, velocidad_apagado * delta)


func _hacer_foto():

while true:

# 1. Esperamos los 10 segundos

await get_tree().create_timer(tiempo_espera).timeout

# 2. ¡DISPARO! Subimos la energía de golpe

light_energy = energia_maxima

print("¡Flash! Foto capturada")

# El código vuelve arriba y espera otros 10 segundos

lunes, 26 de enero de 2026

Dos formas de movimientos aleatorios de un CollisionShape3D;

 extends CollisionShape3D


# --- AJUSTES DE MOVIMIENTO ---

@export var velocidad : float = 5.0

@export var margen_movimiento : Vector3 = Vector3(3.0, 2.0, 3.0) # Cuánto se mueve en X, Y, Z


# --- VARIABLES INTERNAS ---

var posicion_inicial : Vector3

var objetivo : Vector3


func _ready():

posicion_inicial = position

_nuevo_punto_aleatorio()


func _process(delta):

# Movemos el láser hacia el punto objetivo

position = position.move_toward(objetivo, velocidad * delta)

# Si llega al punto, elige otro

if position.distance_to(objetivo) < 0.1:

_nuevo_punto_aleatorio()


func _nuevo_punto_aleatorio():

# Calculamos un punto nuevo que NO se salga del margen

var x_random = randf_range(posicion_inicial.x - margen_movimiento.x, posicion_inicial.x + margen_movimiento.x)

var y_random = randf_range(posicion_inicial.y - margen_movimiento.y, posicion_inicial.y + margen_movimiento.y)

var z_random = randf_range(posicion_inicial.z - margen_movimiento.z, posicion_inicial.z + margen_movimiento.z)

objetivo = Vector3(x_random, y_random, z_random)

------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------


extends CollisionShape3D

# El rango máximo que se podrá mover desde su posición original
@export var amplitud : float = 89.05 
# La velocidad a la que cambia de posición
@export var rapidez : float = 0.7 

var posicion_original : Vector3

func _ready():
# Guardamos la posición inicial para que no se escape al infinito
posicion_original = position

func _process(delta):
# Creamos un movimiento aleatorio para cada eje
var movimiento = Vector3(
randf_range(-amplitud, amplitud),
randf_range(-amplitud, amplitud),
randf_range(-amplitud, amplitud)
)
# Aplicamos el movimiento suavizado con lerp para que no sea un teletransporte brusco
position = position.lerp(posicion_original + movimiento, rapidez * delta)



domingo, 25 de enero de 2026

GDScript otro ejemplo de varias camaras en Godot 4.5 3d;

 extends Node


# Variables para guardar las cámaras

var Camera3Dparediz : Camera3D

var Camera3Dparediz2 : Camera3D

var Camera3Dladron : Camera3D


func _ready():

# 1. LOCALIZAMOS LOS NODOS (Tus rutas perfectas)

Camera3Dparediz= $"Camera3Dparediz"

Camera3Dparediz2= $"Camera3Dparediz2"

Camera3Dladron= $"../CHARACTERBODY/MeshInstance3D2/Camera3Dladron"



# 2. LIMPIEZA INICIAL (Apagamos todo menos la primera)

if Camera3Dparediz2: Camera3Dparediz2.current = false

if Camera3Dparediz: Camera3Dparediz.current = false

if Camera3Dladron: Camera3Dladron.current = true

# 3. PRIMER ACTO: JAPONÉS 1

if Camera3Dparediz:

Camera3Dparediz.current = true

print("--- 1. JAPONÉS 1 ACTIVO (10s) ---")

await get_tree().create_timer(5.0).timeout

if Camera3Dparediz: Camera3Dparediz.current = false # Apagamos Japones 1

if Camera3Dparediz2:

Camera3Dparediz2.current = true

print("--- 2. GRÚA ACTIVA (20s) ---")

await get_tree().create_timer(10.0).timeout

if Camera3Dladron:

Camera3Dladron.current = true

print("--- 1. JAPONÉS 1 ACTIVO (10s) ---")

await get_tree().create_timer(15.0).timeout

Nuevo Devlog; avances para Stealing from the history museum;

 I'm continuing to work on my game, Stealing from the History Museum, by perico415. This is a preview for Windows and Linux. I'm only posting about 22 seconds of the first level and another 22 seconds of the second, because what I'm really interested in is showing the work on the third level so you can see my progress with the camera controls. I really like movies and I've achieved a cinematic feel to the game... It's January now, and I'm already saying I'll dedicate a year to the game. It's possible I'll go beyond the 8 or 10 levels I was planning and make 12 or more.

A brief summary of what I've done so far:

Level 1 - The thief fights living paintings

Level 2 - The thief has to destroy some laser lights

Level 3 - The thief has to get past many people blocking his path in a room... (in development...)



Sigo avanzando mi juego Stealing from the history museum. by perico415  un avance para windows y linux, solo pongo unos 22 segundos del primer nivel y otros 22  del segundo nivel , por que lo que me interesa es mostrar  el estudio del tercer nivel para que veáis mis avances con el juego de las cámaras, me gusta mucho el cine y e conseguido un manejo cinematográfico del juego….estamos en enero,,,ya voy comentando que le dedicare 1 año al juego, es posible que supere los 8 o 10 niveles que pensaba darle y aga unos 12 o mas, 

Un breve resumen de lo echo asta ahora.

Nivel 1- el ladrón se pelea con cuadros vivientes-

Nivel 2- el ladrón a de destruir unas luces láser-

Nivel 3- el ladrón a de sortear mucha gente que le estorba el paso en una sala…...(en desarrollo...)

https://perico415.itch.io/stealing-from-the-history-museum/devlog/1328869/level-3-the-thief-has-to-get-past-many-people-blocking-his-path-in-a-room-in-development



captura de pantalla, me encanta este aire profesional de las versiones,,0.0.1   ..... 0.0.2    .... 0.0.3 ....    0.0.4 .....    etc... etc queda genial.


captura de pantalla, me encanta este aire profesional de las versiones,,0.0.1   ..... 0.0.2    .... 0.0.3 ....    0.0.4 .....    etc... etc queda genial.


sábado, 24 de enero de 2026

Muy buen GDScript para jugar con 3 y 4 camaras;

 extends Node


# Variables para guardar las cámaras

var camara_japones : Camera3D

var camara_grua : Camera3D

var camara_japones2 : Camera3D

var camara_ladron : Camera3D


func _ready():

# 1. LOCALIZAMOS LOS NODOS (Tus rutas perfectas)

camara_japones = $"WorldEnvironment/guia de turista 2 limpio NO TOCAR3/Camera3Djapones"

camara_grua = $"WorldEnvironment/GRUACAMARA/Camera3Dgrua"

camara_japones2 = $"WorldEnvironment/guia de turista 2 limpio NO TOCAR2/Camera3Djapones2"

camara_ladron = $"WorldEnvironment/CHARACTERBODY/MeshInstance3D2/Camera3Dladron"


# 2. LIMPIEZA INICIAL (Apagamos todo menos la primera)

if camara_grua: camara_grua.current = false

if camara_japones2: camara_japones2.current = false

if camara_ladron: camara_ladron.current = false

# 3. PRIMER ACTO: JAPONÉS 1

if camara_japones:

camara_japones.current = true

print("--- 1. JAPONÉS 1 ACTIVO (10s) ---")

await get_tree().create_timer(5.0).timeout

# 4. SEGUNDO ACTO: LA GRÚA

if camara_japones: camara_japones.current = false # Apagamos Japones 1

if camara_grua:

camara_grua.current = true

print("--- 2. GRÚA ACTIVA (20s) ---")

await get_tree().create_timer(10.0).timeout

# 5. TERCER ACTO: JAPONÉS 2

if camara_grua: camara_grua.current = false # Apagamos Grúa

if camara_japones2:

camara_japones2.current = true

print("--- 3. JAPONÉS 2 ACTIVO (30s) ---")

await get_tree().create_timer(15.0).timeout

# 6. ACTO FINAL: EL LADRÓN (Toma el control)

if camara_japones2: camara_japones2.current = false # Apagamos Japones 2

if camara_ladron:

camara_ladron.current = true

print("--- FINAL: LADRÓN ACTIVO. ¡A JUGAR! ---")