Godot, scripts para Godot estudios y aprendizajes, Creacion de videojuegos. Creacion y publicacion de videojuegos en internet. Como hacer videojuegos. C# unity. Animaciones unity blender. Personajes videojuegos graficos dibujos. Diseño grafico. Comic. Animaciones gif. Dibujo de retratos. Realidad virtual. Cine y realidad virtual.
miércoles, 4 de marzo de 2026
Comentando Stealing from the history museum.;
domingo, 1 de marzo de 2026
Modelando animando añadiendo arañas a mi juego;
Para hacer mas atractivo mi trabajo estoy rellenando con ambientacion de terror el juego este al que pienso dedicar 1 año .
Hoy mejore el trabajo de modelar unas arañas y de animarlas y texturizarlas con Blender y con Godot 4.6 ayudado por la IA del navegador de windows 11, en detalles para animar la araña de forma simetrica, y ayudandome con los poligonos y el lood de Godot para ahorrar recursos en la memoria del juego y que no pese demasiado.
Tengo que rellenar este blog con detalles que boy aprendiendo, hace tiempo no lo ago casi que solo me dedico a publicitarme y promocionarme, .
sábado, 28 de febrero de 2026
Stealing from the history museum. » Devlog;
https://perico415.itch.io/stealing-from-the-history-museum/devlog/1423165/give-it-a-horror-feel
26-2-26
Utilizo ahora para el videojuego la versión de Godot 4.6, estoy muy contento con la versión 4.6 es fantástica.
Noto que al juego le falta algo de sabroso, esta soso, así que le voy a dar carácter de videojuego de terror, que de momento no esta censurado por los procesadores de pago, aun estoy con 3 niveles y hay un inicio al 4 nivel pero esta mas que verde.
En el primer nivel e puesto efecto de niebla y empece adornar ambientar con aspecto terrorífico con calaveras esqueletos telarañas columnas y la niebla…..cambia bastante.
En el segundo esta igual y en el tercero hay bastantes mas personajes que el ultimo demo que subí a itch.io.
También e aumentado efectos de sonido y de música.
Boy algo mas lento de lo que suelo ser con el trabajo de este juego, pero me comprometo a estar 1 año con el.
Si hay semanas que me quemo haciéndolo lo iré alternando con juegos cortos y eróticos que aria en un par de días en html para web, para que mis fans se rían un poco.
Y bueno ahora mismo le pondré el tag al juego de horror terror, porque en un principio solo era el robo en el museo, pero si le doy terror sera mucho mas llamativo…..espero saber trabajarlo bien y ser constante….hoy subo para version de windows, mas adelante subire la de linux, me funciona lento el internet...
February 26, 2026
I'm currently using version 4.6 of Godot for the video game, and I'm very happy with it; it's fantastic.
I've noticed the game is lacking something; it's bland. So, I'm going to give it a horror feel, which isn't currently censored by payment processors. I'm only at three levels so far, and there's a start to the fourth level, but it's still very much a work in progress.
In the first level, I added a fog effect and started decorating it to create a terrifying atmosphere with skulls, skeletons, cobwebs, columns, and the fog... it makes a big difference.
The second level is the same, and the third has quite a few more characters than the last demo I uploaded to itch.io.
I've also increased the sound effects and music. I'm working on this game a bit slower than usual, but I'm committed to working on it for a year.
If there are weeks when I burn out working on it, I'll alternate it with short, erotic games that I'll make in a couple of days using HTML for the web, so my fans can have a laugh.
And well, right now I'm going to tag the game as horror, because at first it was just about the museum robbery, but if I add horror elements it will be much more appealing... I hope I can work on it well and be consistent... Today I'm uploading the Windows version; later I'll upload the Linux version. My internet is slow...
domingo, 22 de febrero de 2026
Godot 4.6 ejemplo de niveles y de resoluciones de pantalla.;
jueves, 19 de febrero de 2026
GDScript efecto de fogonazo y de sonido de flas de camara de fotos, Godot 4.6;
extends OmniLight3D
@export var energia_maxima : float = 10.0 # Potencia del flash (¡Más potente!)
@export var tiempo_espera : float = 10.0 # Cada cuánto dispara (Más lento)
@export var velocidad_apagado : float = 5.0 # Suavidad al apagarse
# Referencia al sonido hijo de esta luz
@onready var sonido_flash = $AudioStreamPlayer3D
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 configurados
await get_tree().create_timer(tiempo_espera).timeout
# 2. ¡DISPARO!
light_energy = energia_maxima
# Sonamos el flash
if sonido_flash:
sonido_flash.play()
print("¡Flash potente! Foto del segundo personaje capturada")
# El código vuelve arriba y espera
lunes, 16 de febrero de 2026
Gdscript para cambiar resolucion de pantalla y centrarla en la pantalla del pc;
extends Node
# Definimos las tres resoluciones.
var resolucion_1: Vector2i = Vector2i(1920, 1080)
var resolucion_2: Vector2i = Vector2i(1280, 720)
var resolucion_3: Vector2i = Vector2i(800, 600)
func _input(event: InputEvent) -> void:
if event.is_action_pressed("RESOLUCION1"):
DisplayServer.window_set_size(resolucion_1)
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
centrar_ventana() # <--- Llamamos a la función mágica
if event.is_action_pressed("RESOLUCION2"):
DisplayServer.window_set_size(resolucion_2)
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
centrar_ventana()
if event.is_action_pressed("RESOLUCION3"):
DisplayServer.window_set_size(resolucion_3)
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
centrar_ventana()
# Esta es la función que hace el cálculo para centrarla
func centrar_ventana():
# Cogemos el tamaño de la pantalla (el monitor)
var pantalla_size = DisplayServer.screen_get_size()
# Cogemos el tamaño que tiene ahora la ventana
var ventana_size = DisplayServer.window_get_size()
# Calculamos el centro y movemos la ventana
DisplayServer.window_set_position(pantalla_size / 2 - ventana_size / 2)
--------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
Explicacion: quiero poner diferentes resoluciones de pantalla del juego https://perico415.itch.io/stealing-from-the-history-museum/
tenia un problema que la resolucion grande salia descentrada y consultando con la IA me resolvio el problema, apenas estudio las soluciones que me hace, quiero hacer muchas cosas, videos de youtube, el blog, y los juegos, en los juegos me quiero centrar en una idea y en unos graficos, me gustaria saber programar pero boy a lo justito para poder crear ideas.............
un detalle del GDScript es que si se coloca en Godot 4.6 en este lugar que indica el pantallazo, no necesitas ponerlo en cada nivel del juego, esto lo estoy aprendiendo de la IA;.Resumen de mi ultimo trabajo https://perico415.itch.io/stealing-from-the-history-museum;
https://perico415.itch.io/stealing-from-the-history-museum;
web de mi juego que voy trabajando , unos 3 meses , pero estare otros 9 o 12 1 año quiero dedicar a este proyecto.
https://perico415.itch.io/stealing-from-the-history-museum/devlog/1382455/mouse-clik
Devlog actualizaciones constantes del juego, en esta hay un enlace para ver desde un navegador, html web en forma de diapositivas los avances del juego,
lunes, 9 de febrero de 2026
Girar un extends MeshInstance2D para Godot 4.6 con GDScript , gira encoge y borra;
extends MeshInstance2D
@export var velocidad_giro : float = 0.2
var tiempo : float = 0.0
var tiempo_limite : float = 35.0
# Guardamos la escala original para que el cálculo sea preciso
var escala_inicial : Vector2
func _ready():
escala_inicial = scale
func _process(delta):
tiempo += delta
# 1. Giro suave (el que te gusta)
rotation += velocidad_giro * delta
# 2. Encogimiento MUY lento
# Calculamos el progreso del tiempo de 0.0 a 1.0
var progreso = clamp(tiempo / tiempo_limite, 0.0, 1.0)
# Interpolamos la escala: va desde la inicial hasta casi cero (0.05)
# No llegamos a 0 exacto para evitar errores visuales antes de tiempo
scale = escala_inicial.lerp(Vector2(0.05, 0.05), progreso)
# 3. Borrado final
if tiempo >= tiempo_limite:
queue_free()
miércoles, 4 de febrero de 2026
martes, 3 de febrero de 2026
Juego html echo en una hora, estudiando web html con Godot 4.5.;
Estoy experimentando html con godot 4.5 para jugar directamente desde la web, este juego lo hice en 1 hora, y ya tiene mas de 25 visitas y a sumado 1 nuevo seguidor a mi trabajo en itch.io, los temas de adultos tienen muchisimo tiron, lastima que los procesadores de pago no permitan algun veneficio economico minimo , pero en fin, yo estoy mas por aficion al desarrollo que por tema monetario....
domingo, 1 de febrero de 2026
stealing from the history museum; pruebas para html web;
https://perico415.itch.io/stealing-from-the-history-museum/devlog
dia 1-02 26 estoy haciendo pruebas para html navegador web y de momento solo e conseguido que funcione este archivo que subi hoy la prueba.zip, solo puedes mover el personaje y explorar con la camara el interior de la puerta, pero si no quereis descargar nada, de momento esto es lo que se hacer en html....en las descargas es como los videos mucho mas completado y mucho mas jugable, mejor iluminado y sin graficos que estorpecen el juego........
February 1st, 2026: I'm doing tests for HTML in a web browser, and so far I've only managed to get this file, test.zip, working. You can only move the character and explore the inside of the door with the camera. But if you don't want to download anything, this is what I can do in HTML for now... The downloaded version is like the videos, much more complete and playable, better lit, and without graphics that hinder the gameplay...
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;
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)
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...)
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! ---")
jueves, 22 de enero de 2026
Resumen de lo conseguido trabajado asta ahora de mi juego Stealing from the history museum. by perico415;
Resumen de lo conseguido trabajado asta ahora de mi juego Stealing from the history museum. by perico415
Primer nivel, El personaje el ladrón aparece en una ventana, a subido a una sala del museo y tiene la capacidad de colocar explosivos, lanzar explosivos y disparar, revienta una puerta colocando una bomba por temporizador, ojo has de apartarte, puedes morir con tu propio explosivo,
consigues entrar en la sala y hay una serie de cuadros, dos de ellos son intrigantes, te acercas a ellos y surgen una especie como de fantasmas que te persiguen, si te tocan mueres y has de reiniciar ese nivel, al morir salen escenas de muerte, y buelbe a empezar el nivel, si disparas a los fantasmas estos se convierten en humo, cuando aparecen hay una cámara que los enfoca en exclusiva a ellos unos instantes, tu por tu cuenta puedes mover la cámara por el juego como te de la gana, rotar alrededor del personaje acercarte alejarte, una pasada vamos..
Cuando los destruyes se habré una entrada a otra sala, en esta hay unos láseres que recorren la sala de un punto a otro si te toca una luz también mueres y se reinicia el juego desde ese punto desde esa misma sala, has de disparar a unos interruptores que apagan esos láseres, Entonces vas a la tercera sala o nivel escena en esta estoy empezando a poner personajes , turistas japoneses en esa sala pero docenas de ellos que están buscando, fotografiando, paseando, incordiando, molestando al ladrón…….y asta hay lo que estoy trabajando...continuara...
GDScript para mover un extends MeshInstance3D en forma de ir y retornar;
extends MeshInstance3D
# --- VALORES AJUSTABLES ---
@export var velocidad : float = 0.2 # Qué tan rápido camina
@export var ancho_ovalo : float = 0.3 # Distancia hacia los lados (Eje X)
@export var largo_ovalo : float = 5.0 # Distancia adelante y atrás (Eje Z)
var tiempo : float = 0.0
func _process(delta):
# El tiempo va corriendo...
tiempo += delta * velocidad
# Calculamos la nueva posición usando Seno y Coseno
# El Coseno hace el movimiento de adelante/atrás (Z)
# El Seno hace el movimiento de izquierda/derecha (X)
var nueva_x = sin(tiempo) * ancho_ovalo
var nueva_z = cos(tiempo) * largo_ovalo
# Aplicamos la posición
global_position = Vector3(nueva_x, global_position.y, nueva_z)
# --- ESTO HACE QUE EL PERSONAJE MIRE HACIA DONDE CAMINA ---
# Calculamos hacia dónde irá en el siguiente fotograma para rotarlo
var objetivo_mirada = Vector3(sin(tiempo + 0.1) * ancho_ovalo, global_position.y, cos(tiempo + 0.1) * largo_ovalo)
look_at(objetivo_mirada, Vector3.UP)
-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
Explicacion: en un nivel de mi nuevo juego https://perico415.itch.io/stealing-from-the-history-museum
quiero poner unos turistas japoneses dando vueltas por una sala , van vienen, el MeshInstance3D es el padre donde alojara el hijo, el personaje en 3d en formato fbx, con animacion de Mixamo de caminar.....









