NVGT

Este hilo contiene 21 post y 1 página(s).

Mensajes fijados

En una ciudad en ruinas, un hombre y una mujer de estilo caricatura llaman la atención. Él viste una sudadera oscura con un diseño de calavera, vaqueros y zapatillas; ella, una camisa gris y falda oscura, portando una espada roja. Ambos tienen heridas y emiten humo. Un gato negro de ojos rojos se sienta cerca. El entorno es desolador, con edificios dañados y escombros por todas partes.

Angel_R05

Lunes, 24/11/2025 09:11:46 • Editado Fijado

Hola, no sé que tanta trascendencia vaya a tener el hilo pero bueno aquí lo dejo igual para que el apartado no esté vacío.
Aquí se hablará y se compartirán recursos de NVGT (Non Visual Gaming Toolkit) un lenguaje basado en Angel Script y con inspiración en BGT, el antiguo motor que ya conocemos.
Para mayor información pueden visitar el sitio oficial y así descargar el binario del motor para el sistema correspondiente, así como otros recursos más.

2 0
La imagen muestra un paisaje nocturno con una gran luna roja brillante en el cielo, iluminando un océano formado por líneas de código entrelazadas que brillan tenuemente en colores rojo, púrpura y azul. Las olas digitales se extienden hasta el horizonte

asmodeus

Lunes, 24/11/2025 09:47:20

que onda. acá les vengo a ahcer mi primer aporte. es una clase de traducción que creó un compa gringo y modificada por mi.
la clase originalmente usaba dics. y se preguntarán: ¿asmodeus porqué cambiaste los diccionarios por arraes? pues en la práctica descubrí que era lentíisima la función de búsqueda. entonces me decidí por usar arraes y subió muchísimo el rendimiento.
nota: la función t_ funciona perfecto... pero find y find_split son pequeñas variaciones/caprichos que le hice para no cambiar tan radicalmente el sistema de traducción de uno de mis juegos.

Archivo adjunto: tradu.nvgt (4.0 KB)
1 0
Imagen de perfil por defecto

erlking

Lunes, 24/11/2025 10:20:10

algo que nunca entendí, quizás por mi falta de conocimiento lol, qué diferencia hay entre m.run y m.monitor? por lo que vi los dos funcionan bien, m.monitor supongo que sería por si quieres manejar teclas en el menú a parte de las básicas o... qué se yo.

0 0
En una ciudad en ruinas, un hombre y una mujer de estilo caricatura llaman la atención. Él viste una sudadera oscura con un diseño de calavera, vaqueros y zapatillas; ella, una camisa gris y falda oscura, portando una espada roja. Ambos tienen heridas y emiten humo. Un gato negro de ojos rojos se sienta cerca. El entorno es desolador, con edificios dañados y escombros por todas partes.

Angel_R05

respondiendo a erlking Lunes, 24/11/2025 10:34:05

erlking escribió:
algo que nunca entendí, quizás por mi falta de conocimiento lol, qué diferencia hay entre m.run y m...

no me acuerdo yo porq hace rato q no uso el menu (si hablas de ese) pero yo supondria q si va por ese lado, tipo el monitor para loop no bloqueante y run para el contrario, yo que se

1 0
La imagen muestra un paisaje nocturno con una gran luna roja brillante en el cielo, iluminando un océano formado por líneas de código entrelazadas que brillan tenuemente en colores rojo, púrpura y azul. Las olas digitales se extienden hasta el horizonte

asmodeus

respondiendo a erlking Lunes, 24/11/2025 10:39:53 • Editado

erlking escribió:
algo que nunca entendí, quizás por mi falta de conocimiento lol, qué diferencia hay entre m.run y m...

run es una función que ejecuta un bucle en lo que elijes una opción y al selexionarla devuelve su posición en la lista.
monitor es para crear tu propio bucle y monitorear el menú. mira, te dejo un egemplo que siento que no me expliqué bien :D

```
void main_menu()

sound men; men.load("mus.ogg"); men.play_looped(); m.reset(); m.add_items({"iniciar juego", "borrar partida", "crear partida", "salir"

);
m.intro_text=(t.find("menú principal."));
m.automatic_intro=true;
while(true)

wait(5); if (m.monitor()) continue; int mres=m.selected_item; if(mres==0) speak("iniciando juego..."); if(key_pressed(KEY_V)) speak(men.volume+" nivel de volumen.");

}
```

1 0
Imagen de perfil por defecto

erlking

Lunes, 24/11/2025 10:48:46

creo que ya entendí. a la larga siento que conviene mejor el run

0 0
La imagen muestra un paisaje nocturno con una gran luna roja brillante en el cielo, iluminando un océano formado por líneas de código entrelazadas que brillan tenuemente en colores rojo, púrpura y azul. Las olas digitales se extienden hasta el horizonte

asmodeus

Lunes, 24/11/2025 11:01:16

para cosas simples si es mejor el run. ya si es algo más abanzado el monitor

1 0
En una ciudad en ruinas, un hombre y una mujer de estilo caricatura llaman la atención. Él viste una sudadera oscura con un diseño de calavera, vaqueros y zapatillas; ella, una camisa gris y falda oscura, portando una espada roja. Ambos tienen heridas y emiten humo. Un gato negro de ojos rojos se sienta cerca. El entorno es desolador, con edificios dañados y escombros por todas partes.

Angel_R05

Lunes, 24/11/2025 11:56:09 • Editado

Yo igual aquí dejo un aporte, es una clase q maneja archivos y carpetas en pack_files (archivos .dat), permite cargar el dat en memoria para poder añadir o eliminar carpetas y archivos a ese pack en tiempo de ejecución sin necesidad de eliminar y estar creando dats a cada rato. o sea sí lo hace pero es de manera interna, por lo que si por ejemplo se están añadiendo archivos o modificando el contenido de los mismos dentro de un programa o juego una vez hechos todos los cambios se puede guardar ese archivo con los cambios hechos y ya entonces se guarda todo de una y se evita estar guardando a cada ratito. que se puede, pero no es lo recomendable.
así mismo si esto deja voy a meter el encriptador y el desencriptador para los q gusten usarlos, funcionan de manera recursiva por lo q si se elige una carpeta se mete automáticamente cada subcarpeta con sus respectivos archivos.
Added: Nomás se me adjuntó el packer JAJASJAJJAJA yo pensé que esto permitía varios archivos pero me reemplazó los otros, en cuanto tenga chance o alguien postee voy poniendo los otros.

Archivo adjunto: packer - copia.nvgt (2.6 KB)
1 0
La imagen muestra un paisaje nocturno con una gran luna roja brillante en el cielo, iluminando un océano formado por líneas de código entrelazadas que brillan tenuemente en colores rojo, púrpura y azul. Las olas digitales se extienden hasta el horizonte

asmodeus

Lunes, 24/11/2025 12:22:38

posteo para que mande los otros

1 0
En una ciudad en ruinas, un hombre y una mujer de estilo caricatura llaman la atención. Él viste una sudadera oscura con un diseño de calavera, vaqueros y zapatillas; ella, una camisa gris y falda oscura, portando una espada roja. Ambos tienen heridas y emiten humo. Un gato negro de ojos rojos se sienta cerca. El entorno es desolador, con edificios dañados y escombros por todas partes.

Angel_R05

Lunes, 24/11/2025 12:42:29

aquí adjunto un zip con los 3 archivos juntos, el packer, extracter y el principal

Archivo adjunto: pack data.zip (4.7 KB)
1 0
Imagen de perfil por defecto

erlking

Lunes, 24/11/2025 13:34:17

muy buena. yo ando viendo como manipular data así para guardar por ejemplo una partida o al menos cosas simples como el nombre o algo así, no renta hacerlo en un txt nomá

0 0
En una ciudad en ruinas, un hombre y una mujer de estilo caricatura llaman la atención. Él viste una sudadera oscura con un diseño de calavera, vaqueros y zapatillas; ella, una camisa gris y falda oscura, portando una espada roja. Ambos tienen heridas y emiten humo. Un gato negro de ojos rojos se sienta cerca. El entorno es desolador, con edificios dañados y escombros por todas partes.

Angel_R05

respondiendo a erlking Lunes, 24/11/2025 13:46:34

erlking escribió:
muy buena. yo ando viendo como manipular data así para guardar por ejemplo una partida o al menos c...

hazlo con el objeto settings, ese justamente es para eso

2 0
En una ciudad en ruinas, un hombre y una mujer de estilo caricatura llaman la atención. Él viste una sudadera oscura con un diseño de calavera, vaqueros y zapatillas; ella, una camisa gris y falda oscura, portando una espada roja. Ambos tienen heridas y emiten humo. Un gato negro de ojos rojos se sienta cerca. El entorno es desolador, con edificios dañados y escombros por todas partes.

Angel_R05

Lunes, 01/12/2025 09:15:50

hola, esto no es exclusivamente de nvgt pero igual lo pongo aquí para no crear un hilo aparte, alguno tiene mas o menos una idea de hacer un tipo parser básico para bloques? o sea maso se me ocurre q podría usar una verificación simple de si se detecta una apertura de bloque en x línea y luego instanciar alguna clase q use todas las líneas desde donde se detectó la apertura hacia adelante hasta que detecte una llave de cierre si es así, esto almacenando por ejemplo el nivel del bloque para tema de bloques anidados y así tener el control de cada apertura y cierre, o en su defecto inicializar desde un principio la clase con el contenido general para que ya vaya teniendo ahí y solo usarlo para consultar en dado caso, y por ejemplo guardar como elementos hijos bloques de su mismo nivel y su bloque padre.
o sea recapitulando el flujo porq siento q no lo expresé del todo bien:

  • se haría una clase code_block_parser.
  • la clase tendría un método para recibir datos de entrada ya sea q se queden guardados como tal en crudo o no, así como una lista de objetos code_block (children) esto para los bloques detectados en el nivel raíz.
  • este método inicializaría una variable contador de nivel q empezaría en 0 (el nivel actual donde estaría el contenido general), para luego llamar a otro método interno el cual recorrería cada línea del contenido y q tomaría como parámetro tmbn la variable de nivel pero pasada por referencia.
  • este otro método si detecta en una de las líneas por ejemplo la apertura de una llave aumentaría en 1 la variable de nivel y seguiría buscando recursivamente, aumentando la variable de nivel por cada bloque abierto esto para bloques anidados.
  • Al estar leyendo las aperturas, también estaría leyendo los cierres, y por ejemplo si detecta una llave de cierre entonces se crea un objeto code_block, se guarda el contenido q esté entre esas dos llaves y se inserta al nivel actual, restando a su vez la variable de nivel pasada por referencia por tema de control. En el caso del nivel 1 se guardaría en el children del code_block_parser como primeros bloques hijos, y ya conforme vayan avanzando se irían guardando internamente en su respectiva lista children (la correspondiente a cada code_block).
  • Si detecta ya al final de la ejecución q la variable de nivel no está en 0 significaría q hubo un bloque sin cerrar, por lo q ya sea q se lance una excepción o q se anule toda la operación y se guarde la advertencia en un log por control.

No sé si estoy bien, esto es lo q se me ocurre muy superficialmente, ya si lo leen los q saben mas pues seria cosa de q me corrijan en lo q esté mal JAJAJA.
salu2

0 0
Soy yo, de piel clara y cabello oscuro peinado. Miro al frente con una expresión tranquila. Llevo una camisa lavanda, un saco azul a cuadros y una corbata morada.  Estoy de pie frente a una pared beige con una decoración floral a mi izquierda y el marco de una puerta oscura a mi derecha.

Rayo

respondiendo a Angel_R05 Lunes, 01/12/2025 09:40:20

Angel_R05 escribió:
hola, esto no es exclusivamente de nvgt pero igual lo pongo aquí para no crear un hilo aparte, algu...

Pues la neta tu idea va bien. Para algo básico no necesitas hacer gran cosa más complicada. Con que leas línea por línea, vayas checando dónde se abre un bloque, subas el nivel, y cuando veas la llave de cierre vuelvas a bajarlo, ya con eso puedes ir armando la estructura sin pedos.
Lo de crear un objeto cada vez que cierras un bloque también está bien, y ya según el nivel en el que estés decides si ese bloque es hijo del parser o hijo de otro bloque. Eso es justo lo que hacen casi todos los parsers simples: mientras más profundo estás, más anidado queda el bloque.
La idea de manejarlo con una función que se llame a sí misma también funciona, y es común para este tipo de cosas. Igual podrías hacerlo con una pila, pero para lo que quieres no hace falta complicarlo (por ahora, al menos).
Y sí, es buena idea que al final revises si el nivel quedó en cero. Si no, pues algo se quedó sin cerrar y ya tú decides si avientas error o solo lo avisas lo que sea.

0 0
En una ciudad en ruinas, un hombre y una mujer de estilo caricatura llaman la atención. Él viste una sudadera oscura con un diseño de calavera, vaqueros y zapatillas; ella, una camisa gris y falda oscura, portando una espada roja. Ambos tienen heridas y emiten humo. Un gato negro de ojos rojos se sienta cerca. El entorno es desolador, con edificios dañados y escombros por todas partes.

Angel_R05

respondiendo a Rayosaurio Lunes, 01/12/2025 09:53:23

Rayosaurio escribió:
Pues la neta tu idea va bien. Para algo básico no necesitas hacer gran cosa más complicada. Con que...

justo, lo quiero para algo realmente básico como guardar cierto contenido correspondiente a un formato tipo para no tener q repetir mil veces el formato y así facilitar las cosas pero también me gustaría dejarlo preparado por si lo llego a usar en un futuro.
el tema de la pila lo estuve checando con chatgpt y creo q entendí, es cosa de q si detecta la apertura de un bloque q cree un objeto nuevo y cheque si la pila ya tiene bloques insertados y ponga como padre el último de esa pila para luego insertar ese al final si es así, poniendo en los bloques raíz del parser en caso contrario y marcando la posición inicial desde donde empieza el bloque. ya para el tema del cierre sacaría el último bloque insertado en la pila, marca el idx de la posición final de las líneas/texto y entonces lo zumba de la stack, ahi si estoy mal me dices pero segun yo asi era como me lo decia esa madre

0 0
Soy yo, de piel clara y cabello oscuro peinado. Miro al frente con una expresión tranquila. Llevo una camisa lavanda, un saco azul a cuadros y una corbata morada.  Estoy de pie frente a una pared beige con una decoración floral a mi izquierda y el marco de una puerta oscura a mi derecha.

Rayo

respondiendo a Angel_R05 Lunes, 01/12/2025 09:55:41 • Editado

Angel_R05 escribió:
justo, lo quiero para algo realmente básico como guardar cierto contenido correspondiente a un form...

smn así mero es

1 0
Imagen de perfil por defecto

eldejota

Miércoles, 04/02/2026 15:17:23

bueno. yo quiero aprendér programación. que lenguáge me recomendarían? y quién me recomiéndan que sepa enceñár bien,

0 0
Imagen de perfil por defecto

nicolas

Martes, 24/02/2026 07:00:55

Yo conozco bastante de programación, o al menos un 30 a 40%, mediante el lenguaje de Python. Más o menos se me da la idea de cómo programar en el motor NVGT, algo similar a como programar con C++
Por ejemplo, cuando termina con el punto y coma (;), es más o menos así.
En Cambio, con Python no termina con punto y coma, si no con los paréntesis.
Por ejemplo, les dejo un código como prueba, con voz TTS de Windows.

import pyttsx3

Nota: cuando utilizo el término "import", le estoy diciendo a Python que me importe el nombre de la librería que necesito usar. Como es este el caso, le digo: "impórteme la librería de texto a voz". Que en este caso, es la librería pyttsx3 (Python text to speech).

Ahora, viene el proceso de inicialización.
Cuando vaya a iniciar el proceso de audio, tengo qué escribir el término "engine", lo cual se traduce como motor. Una vez haya hecho eso, presiono 3 veces la tecla enter, como para tener organización en el código. Luego de escribir el término "engine", presiono barra espaciadora 1 vez, y pongo el signo igual (=), luego la barra espaciadora nuevamente, para que se aplique como variable. Una vez colocada la variable, coloco el nombre de la variable que quiero definir, que en este caso es "pyttsx3". Luego de eso, no debo dejar espacio, si no que, coloco el punto, y la función de inicializar, que es en este caso, el término "init". Por último, queda abrir y cerrar paréntesis.

Código de ejemplo, de principio a fin.

import pyttsx3

engine = pyttsx3.init()

¡Listo! Una vez hecho este paso, ahora necesitamos que el programa nos hable. Y si queremos que la información se muestre en la consola, también lo podemos hacer.
Función principal: engine.
cuando quiera escribir algo para que el programa lo lea hablado, siempre hay que utilizar la función "engine", la cual creamos como variable al principio. Al final de escribir el término "engine", sin dejar espacios, se coloca el punto (.).
Luego de colocar el punto, se coloca el término "say", que es simplemente un método, lo que hace que el programa pueda leer sin errores.
Después de escribir el "say", tengo qué colocar nuevamente los paréntesis, para que funcione correctamente.
Después de eso, si quiero colocar la frase para que la lea, tengo qué colocar las comillas. Y si es una variable, solamente debo colocar el nombre de la misma, sin necesidad de las comillas. Lo mismo para el uso de la consola. Pero, con la función "print".

Ejemplo.
print("hola, mundo.")
engine.say("hola, mundo.")
Por último, la función de ejecución de la voz.
Para que todo funcione bien, nuevamente tengo qué usar el término "engine", pero ya no con "say" si no con "runAndWait", lo cual le indico al programa que realice la función de ejecutar el comando de voz TTs. También debe finalizar con los paréntesis.

Programa de ejemplo.

import pyttsx3

engine = pyttsx3.init()

print("Hola, mundo.")
engine.say("hola, mundo.")
engine.runAndWait()
Listo, ¡Ahí está el texto hablado!

0 0
Una mujer de tez morena clara está de pie y mira directamente al frente con una expresión serena, casi estoica. Su rostro es de forma redonda, con cejas oscuras y espesas que enmarcan sus ojos marrones. Su nariz es ancha y sus labios son de tamaño medio, con un tono rosado natural. Tiene el cabello oscuro, recogido hacia atrás, dejando ver parte de su frente.

Carol-89

Jueves, 26/02/2026 08:52:34

Me dieron ganas de jugar un ratito con NVGT. Empecé a leer el manual y algunas cositas me salieron bien. Creen que con notepad++ es suficiente? O tendría que usar vs code?

0 0
En una ciudad en ruinas, un hombre y una mujer de estilo caricatura llaman la atención. Él viste una sudadera oscura con un diseño de calavera, vaqueros y zapatillas; ella, una camisa gris y falda oscura, portando una espada roja. Ambos tienen heridas y emiten humo. Un gato negro de ojos rojos se sienta cerca. El entorno es desolador, con edificios dañados y escombros por todas partes.

Angel_R05

respondiendo a Carol-89 Jueves, 26/02/2026 10:31:10 • Editado

Carol-89 escribió:
Me dieron ganas de jugar un ratito con NVGT. Empecé a leer el manual y algunas cositas me salieron ...

existe la extensión de nvgt para vs code pero la verdad es que yo no le he dado tanto uso, si te soy honesto al menos ahí sigo programando en notepad entonces si me preguntas a mi yo te diría que con eso hay pero si quieres probar la extensión adelante, a lo mejor tu si le sacas un buen uso (cabe destacar que no sé si la sigan actualizando).
descarga aquí

1 0
La imagen muestra un paisaje nocturno con una gran luna roja brillante en el cielo, iluminando un océano formado por líneas de código entrelazadas que brillan tenuemente en colores rojo, púrpura y azul. Las olas digitales se extienden hasta el horizonte

asmodeus

respondiendo a Carol-89 Viernes, 27/02/2026 07:23:46

Carol-89 escribió:
Me dieron ganas de jugar un ratito con NVGT. Empecé a leer el manual y algunas cositas me salieron ...

Pues... yo sigo usando notepad++. supongo que vs code será más útil pero no me acostumbro.

0 0