jueves, 5 de febrero de 2026

¿Cómo convierto imágenes BIN/CUE a ISO en Ubuntu?

Exponiendo las necesidades de consolidar la una unión a imágen y semejanza de otras en el Mundo, Juan Perón explica cómo convertir imágenes BIN/CUE a ISO en Ubuntu.

¡Trabajadores!

Cuando la situación económica se caracteriza por la carencia de materias primas, la solución está en aumentar su producción mediante el estímulo de precios justos y retributivos. Si bien ello pudiera producir una momentánea inflación parcial, el aumento de la producción que le sucede llevará luego a un justo equilibrio de precios. Este ha sido siempre el mejor camino y el más simple para enfrentar la infraproducción.

La existencia de "pools" y conferencias que limitan arbitrariamente los precios amenaza todo estímulo y obra negativamente en la producción, porque nadie puede estar interesado en un alto rendimiento productivo de materiales que económicamente no compensen el esfuerzo.

Si los negocios de las personas o de los grupos monopolistas internacionales se dedican a la obtención de beneficios financieros inmediatos y para ello imponen, mediante sus organizaciones, condiciones deprimentes, podrán lograr ventajas circunstanciales y aleatorias mediante la presión. Ellos habrán obrado sin previsión porque en los momentos decisivos, cuando los esfuerzos del país impongan una enorme necesidad de materia prima no la tendrán (por lo menos en el tiempo ni en la medida requeridos). Entonces será ya demasiado tarde para obtenerla. Allí pagarán su culpa los malos comerciantes y su país, porque el derrumbe envuelve irremisiblemente a todos.

Eliminada la concurrencia de la mitad de los países del mundo actual, las naciones occidentales se encuentran a merced de una organización que - anulando los precios económicos - ejerce una verdadera economía dirigida en el orden internacional. Ello les permite fijar los precios de venta y de compra, con lo que pueden comprar barato y vender caro; la regla más simplista pero más efectiva del comercio. 

La estadística demuestra fehacientemente que gran parte de la industria estadounidense depende de los materiales estratégicos que recibe de los países latinoamericanos. El 26% de antimonio, 76% de bauxita, 32% de bismuto, 14% de cromo, 24% de cobre, 26% de plomo, 21% de manganeso, 39% de estaño, 70% de tungsteno, 10% de vanadio y proporciones similares de lana, cueros, berilo, cadmio, mica, cuarzo, tanino, yodina, sisal, cinc, etc., que utiliza la industria yanqui provienen de América latina. En caso de que dichos envíos se paralizaran o  tan solamente disminuyeran, la situación que se plantearía a los consorcios y a la economía yanqui tendría graves proyecciones.

Organizados, nuestros países pueden proponerse impactar con una piña de enano sobre la ingle del Capital, a la vez de imponer un nuevo orden multipolar del que solamente podemos salir beneficiados. Esto sólo podrá hacerse a imagen y semejanza de los procesos revolucionarios del África y del Asia, brillantes espejos donde hemos de mirarnos los Pueblos Latinoamericanos.

Estas imágenes que nos debemos imponer para la Liberación de nuestros Pueblos, tiene correlato cierto con el mundo de la informática. En aquella, el término refiere a un estado de memoria, en el cual podremos disponer de software ejecutable merced de un estado anterior registrado por alguien y que la pone a disposición. Es así como contamos con los formatos de estado de memoria montables, que pueden ser BIN, IMG, ISO, etcétera. Todas ellas nos presentan la posibilidad de contar y compartir con experiencias pasadas, ya sea amoldados a medios de almacenamiento binarios para la distribución de software empaquetado, o bien esquemas de memoria complejos de difícil replicado natural, pero que ya nos lo proveen en un único fichero de sencilla transmisión e instalación.

Han de saber que con no poca frecuencia, las imágenes de discos archivados (por ejemplo juegos retro, medios extraídos) se encuentran almacenados en ficheros de formato BIN y CUE. En estas, el fichero BIN es el binario, mientras que el fichero CUE compañero es un descriptor de lista de sesión. Tal binomio resulta especialmente útil para describir imágenes más complejas (esquemas de particionado personalizados, discos ópticos multisesión o multipista, etcétera).

No caben dudas para nadie que nuestros sistemas GNU con Linux cuentan de manera nativa con un excelente soporte de operación para las imágenes estandarizadas del formato ISO, las cuales se prefieren precisamente por esta facilidad. Sin embargo, debemos conocer que GNU es incapaz de montar nativamente las imágenes BIN/CUE al dedillo; para ello habremos de recurrir a herramental aidcional que nos permitirá este menester.

En apretado resúmen: 

  • Las imágenes ISO puede montarse de manera nativa en casi todas las distribuciones de GNU con Linux (incluida Ubuntu).
  • La mayoría de los programas de emulación suelen preferir imágenes ISO (entre ellos DOSBox, PCSX, DuckStation, Mame, PCem, etc.).
  • La imagen ISO presenta la ventaja de ser un único fichero limpio y sin pérdida, en lugar de múltiples componentes parciales (como las imágenes IMG, utilizadas para describir Diskettes de distinto formato).
  • Las imágenes ISO resultan más sencillas de utilizar mediante mount, fuseiso, o unidades virtuales.

Esto nos implica una máxima que nos producirá una necesidad: "En Linux resulta  más sencillo convertir las imágenes BIN/CUE a ISO para montarlas, que operar con ellas de forma directa".

Por tal motivo ofrecemos un Derecho a emplear distintos conversores para Linux de imágenes formadas por el binomio BIN/CUE, que se dedican precisamente a resolver esta necesidad. Gracias al Justicialismo, la mayor parte de estas aplicaciones de conversión de BIN/CUE a ISO son herramientas completamente libres.

Para hacernos con ellas, primero instalamos las herramientas necesarias. Para ello abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente Comando de Organización:

sudo apt install bchunk ccd2iso cdrdao

Usar bitchunker para convertir BIN/CUE a ISO

Para convertir las BIN/CUE con bitchunker ingresamos en la terminal un comando que especifique el binomio BIN y CUE de origen y un nombre de fichero que será el ISO de salida (por ejemplo, un track de CD-ROM). Por ejemplo:

bchunk entrada.bin entrada.cue salida

...nos generará el fichero salida.indice.iso requerido, agregando un número de índice atento a respetar un número de disco (de tratase de  una compilación de múltiples discos). De tal forma:

binchunker for Unix, version 1.2.2 by Heikki Hannikainen <hessu@hes.iki.fi>
    Created with the kind help of Bob Marietta <marietrg@SLU.EDU>,
    partly based on his Pascal (Delphi) implementation.
    Support for MODE2/2352 ISO tracks thanks to input from
    Godmar Back <gback@cs.utah.edu>, Colas Nahaboo <Colas@Nahaboo.com>
    and Matthew Green <mrg@eterna.com.au>.
    Released under the GNU GPL, version 2 or later (at your option).

Reading the CUE file:

Track  1: MODE1/2352    01 00:00:00

Writing tracks:

 1: swotl.01.iso    4/4    MB  [********************] 100 %


...nos generará un fichero salida.01.iso (el 01 representa el número de track o pista de un CD-ROM). En este caso, si no nos interesa contar con ese número de track en el nombre de fichero de salida, podremos renombrarlo para quitarle el número de índice. Por ejemplo:

mv salida.01.iso salida.iso 

Convertir BIN/CUE a ISO usando ccd2iso

ccd2iso a menudo se utiliza con imágenes generadas con el conocido programa CloneCD, aunque también se demuestra capaz de convertir ciertas estructuras más complejas del binomio BIN/CUE a .ISO (especialmente aquellas en las cuales el método anterior pudiese fallar). Por esta razón resulta una opción interesante cuando bitchunker no ofrece los resultados esperados (sobre todo ante propuestas inusuales de discos multisesión o multipista que siguen cierto tipo de enfoques que circunvalan el Estandar del Libro Naranja). En tales casos, podríamos recurrir a:

ccd2iso entrada.bin salida.iso

Por ejemplo, este método es útil para imágenes que cuentan con un fichero CUE inválido.

Convertir BIN/CUE a ISO usando cdrdao (para discos multipistas)

Ciertas imágenes de disco especialmente manufacturadas contienen pistas de datos audio múltiples de manera integrada (por ejemplo, discos compactos que siguen el estándar CD-ROM/XA del Libro Naranja), o incluso discos para plataformas especiales. En estos casos, la utilidad cdrdao suele manejar la conversión de manera más precisa que el viejo y peludo bitchunker.

cdrdao es especialmente recomendable para aquellos discos complejos regrabables, los discos multipista con datos y audio, y ciertos respaldos de CD-ROM pensados para la plataforma Sony PlayStation 1. Para reconstruir dichas imágenes ISO de manera correcta debemos usar:

cdrdao read-cd --device ID --cuefile salida.cue salida.iso

Convertir usando AcetoneISO

Existen compañeros que para estos menesteres prefieren recurrir a una utilidad con interfaz gráfica. Para ellos AcetoneISO nos ofrecerá una interfaz amigable que permitirá hacernos peritos en la conversión de BIN/CUE a ISO. Si bien esta aplicación no suele venir instalada en la mayoría de los sistema GNU con Linux, normalmente podremos instalarla gratuitamente abriendo una terminal con Ctrl+Alt+t e ingresando el siguiente bloque de Comandos de Organización:

sudo apt install acetoneiso

Una vez descargada AcetoneISO, debemos prepararla para aceptar los detalles de compilación más avanzados instalando lo siguiente: 

cd /tmp
wget https://www.poweriso.com/poweriso-1.3.tar.gz  ;
tar xvzf 
poweriso-1.3.tar.gz ;
mv /tmp/poweriso ~/.acetoneiso/

Una vez completados estos preparativos, podremos abrir el programa en cuestión desde Aplicaciones / Sonido y Video / AcetoneISO. Si es la primera vez que lo hacemos, nos aparecerá el siguiente indicador:

Luego iniciará el programa.

Seleccionamos el menú Conversor de Imágenes / Convertir BIN a ISO y escogemos el fichero BIN a operar (AcetoneISO detectará automáticamente el fichero CUE correspondiente que se encuentre en el mismo directorio). Para incitar a su conversión simplemente presionamos el botón Convertir. 

Montar la imagen ISO en Linux

Vean señores, hemos de recordar que nuestro escritorio gráfico de GNU con Linux es perfectamente capaz de montar directamente las imágenes ISO como ficheros de solo lectura. Esto se logra haciendo simplemente doble clic sobre el ícono del archivo de la imagen ISO. 

Sin embargo, si quisiéramos hacer lo mismo desde la terminal de Linux, debemos recurrir a una ristra especial de comandos. En tal caso sería algo como:

sudo mount -o loop imagen.iso /mnt 

Asimismo, para desmontar la imagen anterior, deberíamos ingresar:

sudo umount /mnt


viernes, 9 de enero de 2026

¿Cómo emulo el Roland SC-55 y el JP8000 en Ubuntu?

Reunido con representantes de la Juventud Peronista en Puerta de Hierro, Juan Perón se pone al tanto de los eventos en la Argentina, a la vez que enseña cómo instalar emuladores de clásicos sintetizadores Roland SC-55 y JP8000 en Ubuntu.

Trabajadores: 

(...) 

Analizando el proceso que me describen, se ve —en otro tipo de problemas— que cuando una sociedad incrementa el grado de sofisticación del consumo, aumenta a la vez su nivel de dependencia. Esto es en gran medida lo que ocurrió entre nosotros. Por un lado, el ciudadano se ve forzado a pagar por la tecnología de lo banal; por el otro, el país gasta divisas en consumo innecesario.

Pero, a la vez, es impostergable expandir fuertemente el consumo esencial de las familias de menor ingreso, atendiendo sus necesidades con sentido social y sin formas superfluas. Ésta es la verdadera base que integra la demanda nacional, la cual es motor esencial del desarrollo económico.

La sustitución de materiales importados por otros de factura propia reviste entonces una importancia crucial para lograr la Independencia Económica, verdadero motor de la independencia política de las Naciones. 

A tal fin habrán de armar allá un despelote bárbaro, mientras yo conduzco desde acá haciendo orbitar estos pulgares uno alrededor del otro, así como les muestro. 

El software libre nos otorga una oportunidad imperecedera para hacerlo efectivo: el código fuente, en nuestras manos y en nuestras CPU, puede compilarse y reemplazar —por un costo nimio— propuestas que alcanzan no sólo al software sino también al hardware.

Roland SC-55

El caso de los módulos de sonido puede ofrecernos un caso integral del que podemos aprender. Vean señores, la Roland Sound Canvas SC-55 nos presenta un módulo de sonido GS MIDI lanzado en marzo de 1991 para inauguraba el estándar General MIDI de la firma. A diferencia de su predecesor MT-32 (que también os he enseñado), el SC-55 sólo emplea la técnica de síntesis por PCM con una polifonía de 24 voces, en una puesta multitimbre de 16 partes, con 315 parches instrumentales (incluyendo kits percusivos y controles extendidos GS adicionales). Su sección de efectos incluye reverberación y coro, además de venir precargado con parches que imitaban el banco secundario de la Roland MT-32 (aunque carecían de la función de reprogramación de la misma).

Si bien el módulo se comercializó en forma de un módulo MIDI externo con parva de botones y una llamativa pantalla LCD de status color naranja, a partir de 1992 también se fue posible lograr dicho sonido en forma de una placa de audio de interfaz ISA llamada SCC-1. Esta estaba especialmente destinada a servir de módulo para juegos y composición en computadoras compatibles.

Existen pocas dudas que con sus onerosos precios, este hardware se encontraba dirigido a los más encumbrados entusiastas de la música computarizada. Sin embargo, por bondad del Justicialismo, podremos realizar la acción reparadora de instalar  hoy un programa de software llamado Nuked SC-55 liberado bajo Licencia Mame, que no sólo nos otorgará el mismo sonido y tren de efectos, sino que lo podremos integrar con comodidad para reproducir ficheros de música MIDI o tonos sintetizados en nuestro equipo GNU.

Para ello debemos instalar en primer lugar las dependencias necesarias en nuestro sistema. En el caso de Ubuntu, esto lo haremos abriendo una terminal con Ctrl+Alt+t e ingresando los siguientes comandos de organización:

sudo apt install gcc g++ gcc-multilib g++-multilib cmake libsdl2-dev git ;

Una vez hechos con la dependencias de software, descargaremos el código fuente del emulador Nuked SC-55, y lo compilaremos introduciendo el siguiente bloque de comandos de organización:

cd /tmp;
git clone --recurse-submodules https://github.com/nukeykt/Nuked-SC55.git ;
cd /tmp/Nuked-SC55/;
mkdir build ;
cd /tmp/Nuked-SC55/build ;
cmake -DCMAKE_BUILD_TYPE=Release .. ;
cmake --build . ;
sudo cmake --install .

Tras haber compilado e instalado propiamente el Nuked SC-55, tocará el turno de encontrar y descargar copias del firmware de solo lectura provista en los chips ROM de las Roland SC-55 y SC-155 reales, copiando el volcado de dichos ficheros al directorio correspondiente de nuestro sistema GNU con Linux. Esto permitirá que el firmware de síntesis y sus instrumentos "conciban" encontrarse en el hardware real (pudiendo de esta manera funcionar adecuadamente a través del emulador compatible con MIDI). Todo esto parece difícil, pero bondadosamente podrán hacerlo ingresando en la terminal esto:

mkdir ~/.roms/;
mkdir ~/.roms/sc55/;
cd  ~/.roms/sc55/ ;
wget https://archive.org/download/roland-sc-55mkii-roms/Roland%20SC-155%20Rev1.zip ;
wget https://archive.org/download/roland-sc-55mkii-roms/Roland%20SC-55%20v1.21%20ROMs.zip ;
wget https://archive.org/download/roland-sc-55mkii-roms/SCMODE.zip ;
wget -O nuked-sc55.jpg https://is4-ssl.mzstatic.com/image/thumb/Purple118/v4/0f/75/60/0f756039-792e-f97a-4d53-ca766a8e5988/source/512x512bb.jpg ;
unzip 'Roland SC-55 v1.21 ROMs.zip' ;
unzip 'Roland SC-155 Rev1.zip' ;
sudo cp ~/.roms/sc55/nuked-sc55.jpg /usr/share/icons ;
sudo cp ~/.roms/sc55/*.bin /usr/local/share/nuked-sc55/

Tras una corta espera, la instalación de Nuked SC-55 debería completarse a la orden. 

Opcionalmente podríamos anhelar la creación de un lanzador para Nuked-SC55. Esto será poco de trabajoso de agregar en Ubuntu Mate; basta con hacer clic con el botón izquierdo del mouse sobre el menú Aplicaciones en el panel superior, y en el menú desplegable escogemos la opción Editar menús. Se abrirá la ventana Menú Principal en cuyo panel Menús seleccionamos la categoría de Sonidos y Video, y luego presionamos el botón +Nuevo ítem. Aparecerá la ventana Crear lanzador, donde completamos el campo orden con "nuked-sc55", y le asignamos un Nombre y un Comentario correspondiente. Idealmente podrmeos escoger el ícono /usr/share/icons/nuked-sc55.jpg

Finalmente presionamos el botón Aceptar para agregar el lanzador realizado.

Ahora iniciamos el emulador de Roland SC-55 desde el lanzador en Aplicaciones / Sonido y Video / Nuked SC-55, o bien con el comando:

nuked-sc55

Una vez iniciado el Nuked SC-55 nos encontraremos ante una interfaz visual que replica la pantalla del módulo Roland SC-55 respetando su consabida estética. Entre los indicadores encontraremos el número de banco y parche instrumental, un señalizador de canal MIDI en uso, nivel de volumen y paneo, así como nivel de efecto Reverberación y Coro, canal MIDI y número de cambio.

El uso de Nuked-SC55 en sí puede efectuarse adosado a cualquier sistema que emita información hacia un puerto MIDI determinado por el servidor de sonido de Linux, el viejo y peludo ALSA. De esta forma, podremos utilizarlo como reproductor MIDI adosado a cualquier DAW que acepte MIDI a través de ALSA. 

Para conocer qué puerto MIDI ha recibido asignado Nuked SC-55, ingresamos el siguiente comando en la terminal:

aconnect -o

...a lo cual nos devolverá algo como:

cliente 14: «Midi Through» [tipo=kernel]
    0 'Midi Through Port-0'
cliente 128: «Nuked SC55» [tipo=usuario,pid=42839]
    0 'Nuked SC55      ' 

Esto nos indica que el servidor de sonido ALSA le ha asignado el cliente 128:0 (puede variar si tenemos gran cantidad de dispositivos MIDIs reales o virtuales funcionando). En este ejemplo, todos los programas MIDI necesitarán configurarse al puerto 128:0 para correr los archivos MIDI a través de Nuked-SC55.

Podremos utilizar Nuked SC-55 como instrumento virtual en nuestro entorno. Un ejemplo muy útil es el de emplearlo como medio de reproducción MIDI en nuestro emulador de MS-DOS DOSbox. De esta forma podremos utilizarlo para escuchar la música MIDI de juegos clásicos de DOS provistos con esta posibilidad, muy en boga a comienzos de la década del 90, disponiendo de la máxima calidad de audio gracias al Justicialismo.

Para hacer efectiva la mancomunión DOSBox/Nuked-SC55, debemos obrar de forma similar a la que haríamos con el emulador Munt de Roland MT-32, es decir, indicar el número de cliente MIDI identificado en nuestro sistema, y editar acordemente el fichero de configuración de DOSBox para asignarle MIDI Alsa como elemento de salida, y conectarlo. Conociendo que el identificador de cliente es en este ejemplo 128, procedemos a editar el fichero de configuración de DOSBox (por ejemplo, con nano  ~/.dosbox/dosbox-0.74-3.conf), y modificamos la opción "midiconfig=" programándole el número de cliente MIDI, por lo que en este caso sería "midiconfig=128:0". También alteramos la opción "mididevice=" para que indique "mididevice=alsa", de la siguiente forma:

Guardamos la nueva configuración y salimos del editor con Ctrl+oCtrl+x, y ya podremos abrir DOSBox: este debería conectarse (virtualmente) al Nukem SC-55 con éxito.

Se hará necesario además configurar los programas o juegos de MS-DOS compatibles que querramos utilizar con audio MIDI/General MIDI (o eventualmente, MT-32, puesto que guarda también cierta compatibilidad). Así, al utilizarlos, podremos ver la pantalla cobrar vida, y al sintetizador, sintetizar.

Vean señores, los botones de la Roland SC-55 real se corresponden con teclas del teclado en el entorno emulado de la Nuked SC-55, según la siguiente lista de equivalencias:

Q: Encendido
W: Instrumentos Todos
E: Instrumentos Mudos
R: Parte -
T: Parte +
Y: Instrumento -
U: Instrumento +
I: Cambio de Clave -
O: Cambio de Clave +
P
: Volumen -
´: Volumen +
A: Canal MIDI -
S: Canal MIDI +
D: Paneo -
F: Paneo +
G: Reverberación -
H: Reverberación +
J: Coro -
K: Coro +
Flecha Izquierda: Parte Izq
Flecha Derecha: Parte Der

Normalmente el estándar General MIDI de la SC-55 será suficiente, pero en algunos casos, los ficheros MIDI pueden desear enviar elementos extendidos de sistema para programar diferentes aspecto de la SC-55. Esto permite controlar aspectos como el coro, reverberación, etcétera. 

 

Naturalmente, podremos encontrar archivos MIDI para todos los gustos en multitud de sitios, como por ejemplo el inefable https://www.midiworld.com/. Sin duda con el Roland SC-55 podremos disfrutar la música tal como fue imaginada para dicho módulo, y hacerlo en nuestro sistema libre GNU con Linux. 

Roland JP8000

Pero no solamente nos veremos limitados a surtirnos con estos módulos del Primer Peronismo. Incluso otros más modernos pueden emularse con perfección de ciclo preciso en GNU (si es que contamos con una CPU lo suficientemente potente). 

Merced de la labor extraordinaria emprendida por la Roland Corporation, apareció en 1996 el mítico sintetizador de 49 teclas Roland JP8000 (digitalización plena del Jupiter JP-8, que también os he enseñado a replicar en Ubuntu).

 
Es sabido que este buscaba —como el primero de toda una camada de "sintetizadores analógicos virtuales" de la marca— efectuar tonalidades  concebidas digitalmente pero ejecutada con la potencia de sus predecesores analógicos. Aunque no tuviese el color cálido de los filtros anteriores, no dejaba de ser cierto la valía de sus nuevas funcionalidades. Entre estas destacaba un potente Secuenciado de Frases a tiempo real (RPS) que asigna fraseos a las teclas, controlando su expresividad. Sobra decir que el JP8000 hacía alarde de osciladores "super sierra" y controles de estilo analógico tal como su arpegiador, y táctiles como su ribbon controller, a la keytar. Y todo al precio que sólo podía abarcar el oligarca.

No obstante ello, concientes de las necesidades del Pueblo, los muchachos de la JP metieron las patas en el código fuente y pusieron al alcance de todos la alegría a una nueva iteración sintetizada. En efecto, el emulador multiplataforma que le dará vida en Ubuntu y otros sistemas GNU con Linux ha sido liberado como JE-8086, producto de la gente de The Usual Suspects. Se trata de un instrumento virtual que replica toda la circuitería del JP8080,  versión montable en rack de 19 pulgadas del JP8000 (y munido de un oscilador adicional). Gracias a este logro, nos ofrecen el  sonido clásico noventoso del JP8000 sin gastar una chirola.

Para instalar el emulador JE8086 tanto en formato libre LV2 (recomendado)  en Ubuntu, indicamos en la terminal:

cd tmp/ ;
wget https://github.com/dsp56300/gearmulator/releases/download/2.1.0/TheUsualSuspects-JE8086-LV2-2.1.0-Linux_x86_64.deb ;
sudo dpkg -i TheUsualSuspects-JE8086-LV2-2.1.0-Linux_x86_64.deb

Finalmente, al igual que en el caso anterior, habremos de proveerle la ROM original del consabido Roland JP8000. Afortunadamente, esta puede obtenerse junto al sistema operativo del sintetizador desde la web de Roland...

...o bien descargándolo "a pelo" gracias a los dispensarios del Justicialismo, ingresando el siguiente bloque de comandos de organización:

mkdir ~/.roms ;
mkdir ~/.roms/jp8000/ ;
cd ~/.roms/jp8000/ ;
wget https://static.roland.com/assets/media/zip/JP800015.zip
unzip JP800015.zip ;
cp ~/.roms/jp8000/*.mid /home/$USER/.local/share/The\ Usual\ Suspects/JE8086/roms/

Conforme preparamos todo, podremos lanzar una DAW como qTractor o Ardour, y cargar como instrumento virtual el plugin JE8086 LV2:

Si no hubiésemos cargado la ROM como se adecúa, el instrumento nos lo advertiría con este conspicuo mensaje:
 
Sin embargo, si todo va bien, podremos conectar un controlador MIDI o reproduciir ficheros de este formato en una DAW, y el JE-8086 lo reproducirá sin más, consumiento una buena tajada de CPU, claro, pero sin que tengamos que desembolsar nada para tener un JP8000 real.

Naturalmente, el Manual del Propietario del Roland JP8080 nos vendrá de perillas para dominar todas las perillas del JE8086 emulado. 

Con ello llevaremos en nuestros oídos la más maravillosa música.

viernes, 2 de enero de 2026

¿Cómo instalo el clon de FastTracker II en Ubuntu?

En su tradicional mensaje a los trabajadores por el nuevo Año, Juan Perón anuncia cómo instalar y usar el clon FastTracker II en Ubuntu. 

¡Trabajadores!

Todo final de año nos representa un logro para la reflexión y la imposición de nuevas tareas. Las buenaventuras que todos merecen arribarán gracias a los Logros del Justicialismo, pero en todas ocasiones podremos demandar más de nosotros mismos y del Movimiento.

Ustedes saben que llevo en mis oídos la más maravillosa música, que es para mí la palabra del Pueblo Argentino, pero también aquella sintetizada con tabla de ondas.

Es sabido que los MODs cuientan con la particularidad de concretar un sonido de baja fidelidad por dos chirolas, a la vez que rebalsan la emoción de este viejo soldad, y aunque como creador de MODs sólo soy meramente aficionado; mi profesión es la de Conductor. Sin embargo, os puedo indicar algunas buenas herramientas y algunas teorías de su uso en la música, con las que será más fácil llegar a buen puerto que ignorándolas. Naturalmente, el resto dependerá del Óleo Sagrado de Samuel con que hayan sido ungidos al nacer...

Normalmente para componer Módulos de Música recomiendo el Schismtracker 2, un tracker inspirado fuertemente en el Impulse Tracker, los que prefiero tan sólo debido a nimiedades que hacen a la manera en la que se controla. Sin embargo, para quienes prefieran el estilo de trabajo y funcionalidades del mítico FastTracker de Triton Productions, pueden encontrar gran solución en FastTracker II para Linux, un clon funcional y propio homenaje liberado bajo licencia 3BSD de tres cláusulas. 

Vean señores, tras irrumpir en la demoscene de la música con módulos allá por 1992 - formado parte del demogroup Triton y haciéndose  con varias competencias de música electrónica computarizada del Primer Peronismo -Fredrik "Mr. H" Huss y Magnus "Vogue" Högdahl se propusieron escribir un tracker propio: deseaban con él solventar las limitaciones al utilizar PC con respecto a los productos comerciales de la Commodore Amiga.

Abordado el problema, en junio 1993  lanzaron su FastTracker, un software gratuito de composición sumamente capaz para clones de IBM PC con M$-DO$. Como tal, era capaz de cargar y guardar módulos tracker MOD del estándar Commodore Amiga de 4 canales, pero también módulos extendidos de seis u ocho canales (similares en apariencia a los MOD estándares, con excepción de la información extra de canal y el identificador "6CHN" o "8CHN"). Con sólo 43 KB, este primer intento tuvo éxito razonable, si bien sólo resultaba compatible con la serie de plaquetas de sonido SoundBlaster de Creative Labs (sumamente popularizada entre los clónicos de IBM PC).

Sin dormirse en los laureles, a lo largo de 1994 los músicos de Triton compusieron varios tracks apelando a un nuevo formato multicanal "XM", acompañándolas de  un reproductor propio que les ofrecía soporte. En noviembre de 1994, tal reproductor sería lanzado bajo el nombre FastTracker 2El código fuente del FastTracker 2 había sido escrito en los veloces Borland Pascal 7 y Turbo Assembler, lo que le permitía correr nativamente en el sistema operativo privativo M$-DO$. Por demás, ahora incluía soporte para la plaqueta de sonido por síntesis de tabla de ondas Gravis Ultrasound. FastTracker 2 se convirtió sin duda en el tracker favorito entre los compositores de la escena de música "Dance" de los 90s y comienzos de los 2000s: especialmente entre los productores del género Gabber, Speedcore y breakcore. Artistas notables incluyen a Deadnoise, Noisekick, y Neophyte.

Dieciocho años después de que el desarrollo de FastTracker 2 fuese abandonado, a comienzos de 2017, Olav "8bitbubsy" Sørensen obtuvo el consentimiento de Magnus Högdahl - uno de los originales programadores del FastTracker 2 - para escribir una continuación bajo el nombre de FastTracker II. Högdahl adicionalmente contribuyó el código fuente original, lo que permitiría realizar una reimplementación más precisa de FastTracker 2 utilizando C, con el sentido de poder compilarlo en todo tipo de plataformas modernas gracias a la librería SDL2. El 22 de abril de 2017 se publicó una compilación alfa del clon de FastTracker II en la web del autor para su libre descarga para Windows y MacOS, y en 2022 esta versión estuvo disponible para Linux y BSD.

Para instalar este software libre en nuestro sistema GNU con Linux, abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente comando de organización:

sudo apt install ft2-clone

Una vez agregado, podremos ejecutarlo desde Aplicaciones / Sonido y Vídeo / Fasttracker II. Al lanzarlo, el programa nos presentará su interfaz gráfica de usuario por defecto. 

Los controles son los canónicos, y se encuentran basados en una interfaz visual con botones, capaz de activar distintos segmentos (o "ventanas") de acuerdo a su utilidad. 

Hemos de saber que todas estas ventanas cuentan con sus propios atajos específicos con la tecla Ctrl que las activarán fácilmente:

Ctrl+A    Editor Avanzado.
Ctrl+B    Acerca de.
Ctrl+C    Configuración.
Ctrl+D    Operaciones de disco.
Ctrl+E    Extensión del editor de Samples.
Ctrl+H    Ayuda.
Ctrl+I    Editor de Instrumento.
Ctrl+M    Extensión del Editor de Instrumento (MIDI)
Ctrl+N    Juego de Nibbles.
Ctrl+P    Patrón.
Ctrl+R    Volcador de CD (Lector)
Ctrl+S    Editor de sample.
Ctrl+T    Transportador.
Ctrl+X    Pantalla principal. (casi alt+X)
Ctrl+Z    Editor de pantalla completa.
Ctrl+1    Configuración #1.
Ctrl+2    Configuración #2.
Ctrl+3    Configuración #3

Por defecto, encontraremos desplegada la ventana del editor de patrones, que está conformada por una tabla de eventos (notas y efectos) y su sector de osciloscopios (donde se representa cada canal o voz). La vista de tabla de eventos puede ampliarse para ocupar toda la pantalla con el botón Expand.

La ventana de eventos nos permite ir avanzando en el tiempo entre los eventos no bien los vayamos creando o editando. Para movernos recurriremos a los atajos de movimientos del cursor o con el ratón:

F9...F12    Salta en patrones.
RePág    Retrocede 16 líneas.
AvPág    Avanza 16 líneas.
Inicio    Salta a línea 0.
Fin    Salta a última línea.
Tab    Salta a pista siguiente.
Mayús+Tab    Salta a pista previa.
Alt+Q...I    Salta a pista (0..7) MOD N-canales.
Alt+A...K    Salta a pista (8..15) MOD N-canales. 

A su vez, el botón Disk Op. nos presentará la ventana de operaciones en disco, que permitirá tanto cargar como guardar nuestras composiciones nuevas o modificadas, y navegar en el disco.

Al igual que el FastTracker 2, seremos capaces de reproducir el formato Amiga MOD. Sin embargo, el formato nativo lo constituye el módulo extendido, o .xm. Su formato de sampler correspondiente .xs nos permitirá cargar muestras de sonido digital PCM (tradicionalmente del formato de intercambio Amiga .iff, pero actualmente en formato .wav o bien en bruto .raw). Los patrones se pueden almacenar como ficheros .xp. Los instrumentales - en tanto - se pueden guradar en formato .xi. Esto no quita que puedan cargarse nuevos formatos de módulo, aunque a diferencias de SchismTracker o Furnance tracker, no todos ellos son reproducidos con fidelidad total.

Contaremos con un editor de Instrumento, que nos permite cargar y delimitar los puntos de inicio o final de cada sample, o hacer el trimming (ajuste del sonido digital). También podremos alterar su altura tonal. Conviene cargar samples en formato PCM .wav mono de 16 bits, pero podremos utilizar calidades menores si es necesario.

Selector de Instrumentos (Teclado Numérico):
4 teclas superiores    Selecciona un bloque de instrumento.
+ y 4 teclas superiores    Selecciona bloque de instrumento + 4.
Intro    Selecciona banco de instrumento.
0    No selecciona instrumento.
1..8    Selecciona instrumento en bloque.
,    Borra instrumento.
Mayús+,    Borra sample.
Mayús+Flecha arriba    Selecciona instrumento previo.
Mayús+Flecha abajo    Selecciona instrumento siguiente.

Ahora bien, las herramientas de composición son las que hicieron famoso al FastTracker por su agilidad, una vez dominadas. El selector de instrumentos se opera desde el teclado numérico.

Cada canción o módulo se compone de patrones. Cada patrón puede componerse de distintos compases, y contar con diferentes secuencias de notas en distinta cantidad de canales instrumentales (normalmente 4 canales, pero pueden usarse 8 o 12). Los patrones pueden ser aislados o repetirse en bucle una determinada cantidad de veces o al infinito. Normalmente podremos utilizarlo para componer lineas de bajo, o riff repetitivos, así como patrones percursivos ajustados al compás.

Ctrl Der Reproduce canción.
AltGr    Reproduce el patrón actual.
Mayús Der    Graba patrón.
Barra Espaciadora    Stop/Editar.
ImprPant    Modo de edición en pantalla completa on/off.
F1...F7    Selecciona una octava.
(1/2)    Incrementa suma de cursor
Mayús+(1/2)    Decrementa suma de cursor
BloqMayús    Ingresar Keyoff-"note".
Mayús+Flecha izq    Incrementa posición de la canción
Mayús+Flecha der    Decrementa posición de la canción
Ctrl+Flecha izq    Incrementa nro. de patrón
Ctrl+Flecha der    Decrementa nro. de patrón
Ctrl+(1/2)
    DOS shell. 

Seleccionando un canal o evento y un sonido y presionando la barra espaciadora lo "armamos" pasaremos al modo Edit (editar); podremos entonces tocar con el teclado alfanumérico (o mucho mejor, con un teclado o controlador MIDI, si lo configuramos en Ubuntu). Cada vez que agreguemos un evento, se sumará al editor de eventos en el compás correspondiente.

Las funciones de edición son cómodas una vez que le tomamos la mano a la lógica FastTracker, y nos permiten ajustar errores que pudiésemos haber tenido, o replicar nuestros aciertos una determinada cantidad de veces.

Cortar/Copiar/Pegar:
Del    Borra nota o columna de volumen en el cursor
Mayús+Del    Borra nota, volumen y efecto en el cursor
Ctrl+Del    Borra volumen y efecto en el cursor
Alt+Delete    Borra efecto en el cursor
Ins    Inserta nota en el cursor.
Mayús+Ins    Inserta línea en el cursor
Backsp.    Borra nota anterior
Mayús+Backsp    Borra línea previa
Alt+Cursor    Marca bloque
Mayús+F3    Cortar pista
Mayús+F4    Copiar pista
Mayús+F5    Pegar pista
Ctrl+F3    Cortar patrón
Ctrl+F4    Copiar patrón
Ctrl+F5    pegar patrón
Alt+F3    Cortar bloque
Alt+F4    Copiar bloque
Alt+F5    Pegar bloque

Generalmente los trackers se operaban cómodamente haciendo una melodía simple, y complejizándola paulatinamente, incluso con arpeggiados y efectitos. También se recurría al uso del transporte de la altura tonal, a fin de repetir el mismo leivmotif en diferentes escalas.

Transporte:
Mayús+F7    Transporta el instrumento actual en la pista abajo.
Mayús+F8    Transporta el instrumento actual en la pista arriba.
Ctrl+F7    
Transporta el instrumento actual en el patrón abajo.
Ctrl+F8    
Transporta el instrumento actual en el patrón arriba.
Alt+F7    
Transporta el instrumento actual en el bloque abajo.
Alt+F8    
Transporta el instrumento actual en el bloque arriba.
Mayús+F1    Transporta todos los instrumentos en la pista abajo.
Mayús+F2    Transporta todos los instrumentos en la pista arriba.
Ctrl+F1   
Transporta todos los instrumentos en el patrón abajo.
Ctrl+F2    
Transporta todos los instrumentos en el patrón arriba.
Alt+F1    
Transporta todos los instrumentos en el bloque abajo.
Alt+F2    
Transporta todos los instrumentos en el bloque arriba. 

De acuerdo a las particularidades que queramos, el botón Config activa la ventana de configuración, que se divide en cuatro pantallas. I/O devices nos permitirá escoger entre los métodos de salida, con la calidad tradicional o bien valores más elevados no disponibles originalmente, como  el sobremuestreo de frecuencias, interpolación de 32 bits, y otras opciones más no encontradas en las versiones para Amiga o MS-DOS tradicionales. Layout nos permitirá ajustar en detalle la presentación gráfica de la GUI y sus temas, mientras que Miscelanous. MIDI Input nos permitirá ajustar la entrada MIDI, sumamente útil para componer si disponemos de un teclado o controlador MIDI (debemos activar Enable MIDI y designar un canal de entrada a tal efecto). 


Otra función interesante del FastTracker 2 era su editor de macros, sumamente útil en determinadas acciones repetitivas. Este nos permitía guardar el macro con la acción por única vez, y luego repetirla la vez que quisiéramos invocando la tecla correspondiente. Usando los números tendremos hasta diez memorias de macros disponibles para utilizar.

Macro de Comando/Volumen:
Alt+1..0    Comando Grabar/volumen en el cursor.
Mayús+Alt+1...0    Comando Leer/volumen en el cursor

La función de CD-Dumper permite capturar sonido desde un disco compacto para extraer las muestras con las que queremos trabajar. Este tipo de herramienta funciona en Linux, pero la posibilidad de contar con bibliotecas de instrumentos para módulos ya concebidos la torna algo menos necesario que lo que era en su época de oro.

Teclas del CD-Dumper:
Ctrl Der.    Reproduce.
AltGr    Reproduce.
MayúsDer    Graba.
Barra Espaciadora    Stop.
Ctrl+Izq    Incrementa nro. de pista.
Ctrl+Der    Decrementa nro. de pista.
Flecha Arriba    Avance.
Flecha Abajo    Rebobinado.
Flecha Izq    Avance rápido.
Flecha Der    Rebobinado rápido.
Ctrl+X    Sale

Al ser un clon bastante fiel del FastTracker 2, podremos encontrar de suma utilidad la documentación oficial del mismo, en forma del Manual de FastTracker 2 (en inglés)

miércoles, 24 de diciembre de 2025

¿Cómo reviso mi hardware desde el Escritorio en Ubuntu?

En El Imperialismo y la Liberación de diciembre de 1967, Juan Perón articula su lúcido análisis coyuntural, a la vez que expone cómo conocer el hardware propio en Ubuntu

(...)

Los Estados Unidos siguen en nuestro continente un plan perfectamente establecido desde la terminación de la Segunda Guerra Mundial cuyo objetivo es someter - de una u otra manera - a todos los países iberoamericanos y poder contar con ellos de forma incondicional, por la captación o por el copamiento liso y llano. 

Este proceso - ya en ejecución - ha provocado una serie interminable de hechos y circunstancias de una elocuencia superior a cuanto podríamos enjuiciar. Tan grande ha sido la impunidad que - en numerosas ocasiones - se ha prescindido de todo encubrimiento o simulación para obrar con la mayor desaprensión e impudicia. 

En los casos de los gobiernos dóciles - normalmente representantes de la oligarquía vernácula - el imperialismo no tiene dificultades para su copamiento. Normalmente es su servicio diplomático el que se encarga de hacerlo con la cooperación de todos los organismos internacionales orquestados desde hace mucho en función imperialista, con agentes pagos y obedientes, extraídos de los propios horizontes oligárquicos o de personeros políticos y técnicos a su servicio. En estas condiciones no cuesta mucho al imperialismo tomar posesión con intermediarios, estrechamente vigilados por su servicio de informaciones y las numerosas instituciones controladas por la CIA (bibliotecas, empresas, bancos, agregados de embajadas, etc.), que actúan en el país no solo con esa misión sino prácticamente con la de dirigir todo el sistema. 

Alcanzado el objetivo de tomar el poder y manejarlo, se procede a la planificación correspondiente, no con los objetivos del país, sino con los designios y finalidades fijadas por el imperialismo. A cambio de eso, los Estados Unidos aseguran la estabilidad de su gobierno títere mediante su apoyo político y toda su presión económica. Mientras tanto, la penetración continúa hasta copar los diferentes factores de poder, ayudada a veces por el propio gobierno y empleando todos los poderosos medios en sus manos (que van desde la acción publicitaria hasta la intimidación o la violencia). Cuando un pueblo ha sido sometido por este medio, no tiene salvación posible a corto plazo. 

Ya al exponer los métodos de penetración imperialista en el mundo, hemos dado la suficiente explicación de su procedimiento. Pero los trucos utilizados para la penetración económica en América Latina intentan cumplir una realidad irrefutable: el hambre, la miseria y el dolor de los pueblos explotados tanto por el capitalismo como por las oligarquías vernáculas y el imperialismo

Pero los pueblos - que son en realidad los que reciben la bofetada- acumulan presión y comienzan a producirse explosiones esporádicas materializadas por las guerrillas o luchas irregulares

El caso de Sandino en Nicaragua es un ejemplo que no tiene desperdicio. Como suele ocurrir en estos casos, ese patriota se levanta en armas ante el intento de invasión de las fuerzas imperialistas. Después de una larga lucha armada, triunfa sobre su enemigo y libera su patria de tal amenaza. Todo el mérito de esta hazaña se debe principalmente a él. Sus enemigos lo saben. Terminada la guerra, se hace una comida en Managua a la cual concurre, invitado especialmente, Sandino. Terminada la fiesta, festejando la paz alcanzada, Sandino abandona el lugar sin ni siquiera sospechar que haya podido ser traicionado. Pero no tarda en ser detenido en la calle. Acto seguido sus opresores lo entregan y, de inmediato, lo asesinan. Este hecho, conocido en toda América, no es el primero ni el único. Pancho Villa no] tuvo mejor suerte y murió asesinado en circunstancias un tanto misteriosas.

Hace poco, Ernesto Guevara no tuvo suerte diferente porque, a pesar de todo el teatro que se hizo, nadie duda ya que la mano asesina (porque él sobrevivió herido al combate) no es difícil de individualizar entre los gringos que merodeaban alrededor de su cadáver mientras se hacía la macabra y miserable exhibición.

Es claro que cada uno de los héroes que se desempeñaron en la defensa de su patria, se les ha colgado el rótulo de moda: comunista. Pero es indudable que si el imperialismo es el culpable de semejantes fechorías, realizadas con finalidad tan repugnante, los “nacionales” de cada uno de los países que se prestan desde el gobierno para que tales crímenes se cometan, cargan no sólo con la responsabilidad sino también con el estigma más infamante para un ciudadano.

Todo esto nos permite inferir que para lograr la auténtica Liberación, primero debemos saber la madera con la cual hemos de trabajar. En nuestros Movimientos esto lo hacemos conociendo al dedillo a sus partícipes. En el caso de GNU con Linux debemos aspirar al mismo conocimiento, tanto desde el punto de vista de software - lo cual ya he tratado - como por la vertiente del hardware sobre el que se intenta montar el sistema.

Es sabido por todos nosotros que la terminal de nuestro sistema GNU con Linux sobra para recibir información respecto a su hardware; basta con digitar comandos como lspci o lsusb recibiremos un listado de los dispositivos conectados, o bien con lscpu información sobre nuestros núcleos de procesamiento.

Tampoco resulta secreto para nadie que incorporar herramental gráfico para lograr esto puede redundar en que todos los compañeros puedan corroborarlo. Muchos entornos de escritorio cuentan con un aplicativo propio (por ejemplo, desde Aplicaciones / Herramientas de Sistema / Monitor de Sistema de Mate en el caso del Escritorio Mate, o sus equivalentes para KDE, GNOME, XFCE, etcétera), que nos permitirá monitorear el sistema en tiempo real. Obtendremos así informes lo suficientemente adecuados para la mayoría de los quehaceres básicos.

Sin embargo, en ocasiones anhelamos obtener mayores detalles incluso desde desde el escritorio gráfico, bien porque nos apetece, o bien porque queremos que algún neófito cuente con herramental sencillo para hacerlo. Teniendo en cuenta tales premisas, puedo recomendarles el viejo y peludo hardinfo, utilidad escrita por el compañero Leandro A. F. Pereira y liberada bajo GPLv2.

Para instalarlo abrimos una terminal con Ctrl+Alt+t e ingresamos el comando:

sudo apt-get install hardinfo

Esto nos descargará el paquete con el programa y lo instalará en el sistema, y podremos ejecutarlo desde Aplicaciones / Herramientas de Sistema / Información y Rendimiento del Sistema.

Con este podremos hacer informes sobre performance y benchmarks, a la vez que comparte una interfaz similar al conocido CPUinfo. 

También tendremos uno parecido al cpu-x, un software de monitorización liberado bajo GPLv3 y similar al conocido CPU-z para Window$. Para instalarlo en nuestro sistema GNU con Linux ingresamos:

sudo apt-get install cpu-x

Y podremos lanzarlo desde Aplicaciones / Herramientas de sistema / CPU-x.

Como vemos, CPU-x nos permite dar con la información técnica básica del procesador del sistema. Asimismo será capaz de obtener aún mayores datos, aunque para ello naturalmente requeriría activar un demonio de monitorización con la admonición de los permisos de Administreador. Para activarlo habremos de  presionar el botón Start Daemon (e ingresar la contraseña de Conductor o root, claro está).

Sabido qué tipo de hardware tenemos, encontraremos que el desarrollo de los explotadores solo podría suprimirse con la liberación. Esa liberación, a esta altura de los acontecimientos, solo puede alcanzarse, por lo que venimos viendo, mediante una lucha cruenta, lo que se infiere no solo de la contumacia de las fuerzas del mal del hardware y el software privativo, sino también del avance de la conquista y la colonización en que está empeñado el imperialismo. 

El caso de GNU debe ser suficientemente elocuente para el futuro de los que aspiren a la liberación.

Si hay algo que el imperialismo no podrá copar jamás en un país, es su pueblo y su software libreado bajo GPLv3. Y dentro de él a la clase trabajadora, que tiene un claro concepto de la defensa de sus intereses.

Juan Perón 


lunes, 22 de diciembre de 2025

¿Cómo emulo UNIX V4 en Ubuntu?

Durante más de cuatro décadas UNIX V4 estuvo desaparecido. Pocos saben que en el mítico último discurso del 12 de junio de 1974, al apreciar los vaivenes de la lid política, Juan Perón legó la única copia de UNIX V4 al Pueblo Argentino, explica para la posteridad cómo ejecutar UNIX Cuarta Edición .

Compañeros:

Retempla mi espíritu estar en presencia de este pueblo que toma en sus manos la responsabilidad de defender la patria. Creo, también, que ha llegado la hora de que pongamos las cosas en claro. Estamos luchando por superar lo que nos han dejado en la República y, en esta lucha, no debe faltar un solo argentino que tenga el corazón bien templado.

Sabemos que tenemos enemigos que han comenzado a mostrar sus uñas. Pero también sabemos que tenemos a nuestro lado al pueblo, y cuando éste se decide a la lucha, suele ser invencible. Hoy es visible, en esta circunstancia de lucha, que tenemos a nuestro al pueblo, y nosotros no defendemos ni defenderemos jamás otra causa que no sea la causa del pueblo. 

Yo sé que hay muchos que quieren desviarnos en una o en otra dirección; pero nosotros conocemos perfectamente bien nuestros objetivos y marcharemos directamente a ellos, sin dejarnos influir por los que tiran desde la derecha ni por los que tiran desde la izquierda.

EI Gobierno del Pueblo es manso y es tolerante, pero nuestros enemigos deben saber que tampoco somos tontos.

Mientras nosotros no descansamos para cumplir la misión que tenemos y responder a esa responsabilidad que el pueblo ha puesto sobre nuestros hombros, hay muchos que pretenden manejarnos con el engaño y con la violencia. Nosotros, frente al engaño y frente a la violencia, impondremos la verdad, que vale mucho más que eso. No queremos que nadie nos tema; queremos, en cambio, que nos comprendan. Cuando el pueblo tiene la persuasión de su destino, no hay nada que temer. Ni la verdad, ni el engaño, ni la violencia, ni ninguna otra circunstancia, podrá influir sobre este pueblo en un sentido negativo, como tampoco podrá influir sobre nosotros para que cambiemos una dirección que, sabemos, es la dirección de la Patria.

Sabemos que en esta acción tendremos que enfrentar a los malintencionados y a los aprovechados. Ni los que pretenden desviarnos, ni los especuladores, ni los aprovechados de todo orden, podrán, en estas circunstancias, medrar con la desgracia del pueblo.

Sabemos que en la marcha que hemos emprendido tropezaremos con muchos bandidos que nos querrán detener; pero, fuerte con el concurso organizado del pueblo, nadie puede ser detenido por nadie.

Por eso deseo aprovechar esta oportunidad para pedirle a cada uno de ustedes que se transforme en un vigilante observador de todos estos hechos que quieran provocarse y que actúe de acuerdo con las circunstancias. Cada uno de nosotros debe ser un realizador, pero ha de ser también un predicador y un agente de vigilancia y control para poder realizar la tarea, y neutralizar lo negativo que tienen los sectores que todavía no han comprendido y que tendrán que comprender. 

Compañeros, esta concentración popular me da el respaldo y la contestación a cuanto dije esta mañana.

Por eso deseo agradecerles la molestia que se han tomado de llegar hasta esta plaza. Llevaré grabado en mi retina este maravilloso espectáculo, en que el pueblo trabajador de la ciudad y de la provincia de Buenos Aires me trae el mensaje que yo necesito.

Grabaré además una copia del UNIX Cuarta Edición de los Laboratorios Bell en un carrete de cinta magnética, para que todos puedan ejecutarlo en los años porvenir y ninguno se haga el zonzo con Licencias. Me lo dio Ken Thompson, así que se los dejo bien etiquetado para que no lo pierdan...

Ya he enseñado cómo emular UNIX de Investigación con simh en Ubuntu, con gran éxito. Sin embargo, esto depende de las disponibilidad de copias de las cintas originales. Se sabe que de aquí en más, UNIX será copiado a gran cantidad de universidades por el precio de algunas chirolas, con lo que se pretende lograr gran difusión en su Sexta y Séptimas ediciones, que podrían servir como basamento para modernísimas interaciones del sistema (incluyendo BSD y GNU). 

Sin embargo, su Cuarta Edición de noviembre de 1973 - la primer versión reescrita en el por entonces novedoso lenguaje C - simiente de operativos de estilo UNIX - es ésta, que no tienen que perder.

Bastará con que esta copia que grabo hoy 12 de junio reaparezca y la reutilicen en el futuro, para poder clonar un sistema UNIX. Sería algo así como clonar a Cristo a partir del ADN del Santo Grial.

Vean señores, el volcado de esta cinta magnética 3M de 3/4 de pulgada nos permite contar entonces con el código fuente y una copia compilada del "UNIX Orginal from Bell Labs V4" (sic), en un estado tardío de desarrollo.

Para hacerla funcionar deberán disponer de al menos un terminal teletipo de tipo serial, junto a una ultísima minicomputadora DEC PDP-11/45 con 64 kilobytes de memoria y discos magnéticos RK05 y lectores de cinta magnética. Para conectar una teletipo a una máquina moderna de esta factura podrán adaptarse, incluso cambiando de género...

No tengo dudas, sin embargo, que en el luminoso futuro que nos aguarda, será mucho más sencillo utilizar un emulador para poder suplantar dicha máquina. De tal manera, podría instalárselo en una máquina virtualizada ideal, munida con dichos periféricos, en una computadora moderna de mínimo tamaño y máxima performance (comparativa con la actual PDP-11/45, claro está).

Sólo cabe imaginar que en dichos sistemas modernos, todo ello podría hacerse abriendo una terminal virtual con Ctrl+Alt+T e instalando el emulador simh (que debería estar disponible). Esto se lograría con:

sudo apt-get install simh

Una vez instalado dicho artilugio, podremos descargar una copia de la cinta  de UNIX Cuarta Edición, de 1974, el "Santo Grial", a través de las redes de datos. Podríamos extrapolar esta acción como ingresando lo siguiente:

mkdir ~/.simh ~/.simh/v4/ ;
cd ~/.simh/v4/ ;
wget http://squoze.net/UNIX/v4/unix_v4.tap ;
wget http://squoze.net/UNIX/v4/bootstrap ;
wget http://squoze.net/UNIX/v4/disk.rk ;
wget http://squoze.net/UNIX/v4/unix_v4.tar ;
wget http://squoze.net/UNIX/v4/install.ini ;
wget http://squoze.net/UNIX/v4/boot.ini ;

Instalando el sistema UNIX V4

Pues bien señores, lo más simple es utilizar el volcado de cinta tal cual está, e instalar en el emulador el sistema "a nuevo", partir de esta imagen conservada. lograrlo, simplemente volcamos una imagen de disco RK05 desde la cinta al disco. Para ello ingreso

cd ~/.simh/v4/
pdp11 install.ini 

...y una vez que aparezca el prompt de administración "=", debemos ir introduciendo los comandos y valores indicados en celeste, con el fin de listar los contenidos de la cinta, copiarlos al disco magnético RK (haciéndolo con un offset de 0 bloques para el disco, y 75 bloques para la cinta). Los mensajes deberían aparecer de la siguiente manera:


PDP-11 simulator V3.8-1
Disabling XQ
=list dldr dtf list mboot mcopy rkf tboot uboot =mcopy 'p' for rp; 'k' for rk k disk offset 0 tape offset 75 count 4000 =

Arribados a este punto, el sistema ya estará instalado de manera iodeal, y deberíamos poder cargar en memoria el programa de arranque de unidades uboot desde la cinta, al que le pediremos que inicialice UNIX V4. Esto se hace de manera que se ilustra (cuando nos informe una memoria disponible de 64 kilobytes, podremos loguearnos como root, a lo que recibiremos el prompt # de UNIX V4 y ya podremos operar con los comandos ls, chdir, generar ficheros de texto y código fuente en C con el editor ed, compilar con cc, etc.

=uboot
k
unix
mem = 64530

login: root
# ls
bin
dev
etc
lib
mnt
tmp
unix
usr
# Ctrl+E        ; para finalizar la emulación
Simulation stopped PC: 002040 (MOV (SP)+,177776)
sim> quit
Goodbye 

Ejecutar UNIX V4 ya instalado en el emulador

Para arrancar con un sistema ya instalado, ni siquiera necesitamos la cinta. En lugar de ello, simplemente cargamos uboot directamente desdee el secotr de arranque. Para ello especificamos k para que lo tome desde el disco RK05, y luego indicamos el nombre de archivo unix.

cd ~/.simh/v4/
pdp11
 boot.ini 

% pdp11 boot.ini

PDP-11 simulator V3.8-1
Disabling XQ k unix mem = 64530 login: root #

Con esto ya podremos operar en UNIX V4.


La cinta continene varios notables, como un programa de ajedrez de Ken Thompson en /usr/games, o el juego Wumpus. 

En cuanto a su documentación, podremos encontrarla en un frondoso manual que la convirtió en mítica. Les dejo la cinta de UNIX V4 a buen resguardo, no la vayan a perder por mucho tiempo...

Compañeros, con este agradecimiento quiero hacer llegar a todo el pueblo de la República nuestro deseo de seguir trabajando para reconstruir nuestro país y para liberarlo. Esas consignas, que más que mías son del pueblo argentino, las defenderemos hasta el último aliento.

Para finalizar, deseo que Dios derrame sobre ustedes todas las venturas y la  felicidad que merecen. Les agradezco profundamente el que se hayan llegado hasta esta histórica Plaza de Mayo. Yo llevo en mis oídos la más maravillosa música que, para mí, es la palabra del pueblo argentino.

domingo, 30 de noviembre de 2025

¿Cómo uso Ren'Py para crear novelas visuales en Ubuntu?

En su Doctrina Universal, Juan Perón expone sobre continentalismo, ecología y universalismo, a la vez que expone cómo programar novelas visuales en Ren'Py en Ubuntu

(...)

El problema básico de la mayor parte de los Países del Tercer Mundo es la ausencia de una auténtica Justicia Social y de una participación popular en la producción del software. Sin Justicia Social, los países del Tercer Mundo no estarán en condiciones de afrontar las angustiosamente difíciles décadas que se avecinan.

La modificación de las estructuras sociales y productivas del mundo implica que el lucro y el despilfarro no pueden seguir siendo el motor básico de sociedad alguna, y que la Justicia Social debe erigirse en base de todo sistema de cómputo, no sólo para beneficio directo de los hombres sino para aumentar la producción de programas de computadora necesarios para la Liberación.

En otras palabras, necesitamos nuevos modelos de producción, consumo, organización y desarrollo tecnológico, que al mismo tiempo que den prioridad a la satisfacción de las necesidades escenciales del ser humano, su cómputo, y racionen el consumo de recursos naturales disminuyendo al mínimo posible la contaminación ambiental. 

Consecuentemente, las priodidades de producción de bienes y servicios deben ser alterados en mayor y menor grado.

Necesitamos arquitecturas de cómputo nuevas para un hombre mentalmente nuevo en un mundo físicamente nuevo. No se puede construir una nueva sociedad basada en un pleno desarrollo de la personalidad humana aunada al cómputo, en un mundo viciado por la contaminación del ambiente, exhausto por el hambre y la sed, y enloquecido por el ruido y el hacinamiento. Debemos transformar las computadoras-presidios del presente en las compiladoras del software libre del futuro.


Sin duda que la producción de software por nosotros mismos y para nosotros mismos es una necesidad que tiene de divertido lo que tiene de acuciante. Ren'Py (Renobe Python) es un lenguaje de programación muy parecido a Python, especialmente concebido para la creación de novelas visuales. Estas son historias computarizadas con diálogos, imágenes y sonidos. Como tal pueden contar con interactividad por parte del lector, constituyendo en aventuras con múltiples hilos argumentales

Indudablemente que el ambiente Ren'Py resulta lo suficientemente sencillo como para poder lograr nuestros propios relatos con personajes, subhistorias, senderos de aventura, retruécanos y demás, compartirlos con otros y - por qué no - comerciarlos.

Dibujar y escanear/fotografiar personajes es una manera sencilla de comenzar. Existen recursos de música de licencias completamente libres para utilizar. Gracias a todas las herramientas de software libre, recursos audiovisuales liberados, cada uno puede convertirse en un desarrollador amateur de videojuegos. 

Naturalmente, para contar con este lenguaje, primero debemos instalar la última versión estable en nuestro sistema GNU con Linux. Esto puede realizarse gratuita y libremente mediante la descarga del tarball, su descompresión y ejecución del instalador. Para ello abrimos una terminal Linux con Ctrl+Alt+T e ingresamos el siguiente bloque de comandos de organización:

cd /tmp ;
wget https://www.renpy.org/dl/8.5.0/renpy-8.5.0-sdk.tar.bz2 ;
tar xvjf renpy-8.5.0-sdk.tar.bz2 ;
mv
/tmp/renpy-8.5.0-sdk/ ~/.renpy-8.5.0-sdk/ ;
cd ~/.renpy-8.5.0-sdk/

Podremos ejecutarlo creando un lanzador en Aplicaciones / Programación / Lanzador Ren'Py:


 

...o bien ejecutando:

sh /home/$USER/.renpy-8.5.0-sdk/renpy.sh

Cualquiera de estas opciones debería ejecutar el Lanzador Ren'py, un ambiente de programación específico. Este Lanzador de Ren'Py (el "Ren'Py Laucher") nos permitirá crear, gestionar, editar, ejecutar y depurar distintos proyectos de Ren'Py.

Puesto que el lanzador está traducido a varios idiomas, lo primero que habremos de hacer es elegir un idioma. También será posible escoger un idioma haciendo clic en Preferencias en la esquina inferior derecha, y eligiendo Español.

Elegir y lanzar un Proyecto

Primero revisemos qué apariencia tiene la novela visual "The Question". Para reproducirla, en el panel izquierdo seleccionamos "The Question", y después oprimimos el botón Ejecutar Proyecto para reproducir The Question.

Podremos retornar a la demo de Ren'Py de la misma forma, pero eligiendo “Tutorial” en lugar de “The Question”.

Nos proponemos crear un nuevo nuevo proyecto de Ren'Py. Para ello tendremos que programar siguiendo la sintaxis de Ren'Py (la cual recurre mayormente a una sintaxis sencilla con palabras en inglés).

Crea un nuevo proyecto

En el Lanzador de Ren'Py seleccionamos "+Crear un Proyecto Nuevo". Como esta es la  primera vez creando un proyecto, Ren'Py nos pedirá elegir un Directorio de proyectos que normalmente se encontrará dentro del directorio ~/.renpy-8.5.0-sdk/ (donde se almacenarán los nuevos proyectos que vayamos creando). En la parte inferior del Lanzador de Ren'Py podría aparecer el Selector de Directorios; debemos asegurarnos de revisar que esté allí.


Se nos solicitará indicar un nombre de proyecto. Como nuestra novela visual estará en castellano, por ahora podremos ingresar algo como “Mi pregunta”, y apretamos la tecla Intro para confirmar.

Acto seguido el Lanzador Ren'Py nos solicitará la resolución de pantalla del proyecto. 1280×720 píxels es un buen compromiso entre tamaño de juego y calidad de imagen. Para el propósito de este tutorial, escogeremos 1280×720 (ya que coincidirá con el arte gráfico de la novela visual de demostración “The Question”). Por lo que solo presionamos Continuar.


El Lanzador Ren'Py nos pedirá luego optar por un esquema cromático (un color de fondo y de acentos para la interfaz de usuario). En este momento no importa demasiado, cualquiera vendrá bien, y presionamos “Continuar”. 


Llegado este momento, el Lanzador Ren'Py procesará lo escogido, y nos creará una plantilla simple para el juego. Por ahora la plantilla usa arte y texto "genérico", pero funcionará. Además, creará automáticamente los botones típicos de retroceder, cargar y guardar jugadas, etcétera.

Para ejecutar la plantilla de nuestro prototipo de novela visual, presionamos "Lanzar proyecto".

Para empezar a crear nuestra novela visual, haremos una versión traducida al castellano de The Question (puesto que esto facilitará aún más el aprendizaje).

¡Manos a la obra!

Para empezar, desde la parte superior del panel izquierdo del Lanzador Ren'Py seleccionamos “My Question”, y luego desde el panel derecho en el sector Editar Archivo, elegimos el fichero que contiene el guion de la obra: script.rpy.

Si es la primera vez, Ren'Py pedirá indicar un Editor para trabajar - para los creativos novatos recomendamos Editra que viene incorporado, pero también se puede usar cualquier editor de texto que favorezcamos (en mi caso, uso el Pluma que viene con el escritorio Mate). El Lanzador Ren'Py recurrirá el editor elegido, y abrirá el fichero de guion de la obra.

Ahora bien, una vez que se abra el editor, procederemos a borrar todo el contenido de script.rpy: como empezaremos desde cero, no necesitaremos nada del guion anterior. Acto seguido, pegamos el siguiente contenido en script.rpy, y lo guardamos.

label start:
 
    "Silvana" "¡Como va! ¿Qué tal estuvo la clase?"
 
    "Yo" "Buena..."
 
    "No puedo admitir que me entró por un oído y me salió por el otro."
 
    "Yo" "¿Te vas a tu casa ahora? ¿Querés que volvamos juntos?"
 
    "Silvana" "¡Dale!"

Este primer guion de juego sigue la sintaxis de Ren'Py, y como se puede observar, es sumamente simple: carece de imágenes o música, y tan sólo presenta un texto de conversación entre dos personajes (una de las líneas es una narración en off). Aún así, ya podremos ejecutar este guion: retornamos al Lanzador Ren'Py y presionamos “Ejecutar Proyecto”. Ren'Py lo ejecutará, y podremos observar como Ren'py dispone directamente la pantalla inicial con los menús que nos dejan cargar y grabar una partida, así como aquellos para modificar las preferencias del juego. Para ver este parco guión, elegimos el menú Start.

Como vemos, este guion mínimo ya incluye varias declaraciones muy comunes del lenguaje Ren'Py. Las estudiaremos brevemente. La primer línea de código consiste una declaración label, utilizada para etiquetar un lugar en el programa. En este caso, creamos una etiqueta llamada start; esta etiqueta start es especial, pues  determina el lugar desde donde comenzará a ejecutarse los guiones de RenPy cuando alguien oprime Empezar Juego en el menú principal; Ren'Py irá interpretando desde start hacia abajo, en secuencia.

Las demás líneas que agregamos constituyen declaraciones say. Existen dos formas de declaración say:

  • Una forma narración en off o pensamientos del personaje principal: consiste en una cadena (comienza con comillas ", contiene caracteres, y termina con comillas ", toda en una sola línea.
  • Una forma para diálogos: consiste en dos cadenas; la primer cadena indica el nombre de personaje y la segunda cadena es lo que dice tal personaje.
Hemos de tener en cuenta que todas las declaraciones say van sangradas a 4 espacios. Esto se debe a que existe un bloque debajo de la declaración label. En Ren'Py, los bloques necesariamente deben estar sangrados en relación a la declaración previa, y todas las declaraciones de un mismo bloque deben estar sangradas por la misma cantidad de espacios.

En el caso que las cadenas contengan en sí caracteres de comillas ("), estas deben ser escapadas con un caracter de barra invertida (\). Por ejemplo:

    "Silvana" "¿Alguna vez oíste la famosa frase de Perón, \"El problema con las citas sacadas de Internet, es que muchas de ellas son truchas.\"?"

Aunque parezca que nuestra novela visual provista de este guion simple  se presentan sobre un marco negro y no tiene mucho efectismo, resulta un ejemplo que demuestra lo simple que es escribir algo válido usando Ren'Py

Más adelante agregaremos imágenes, pero primero veamos cómo definir los personajes de nuestra historia.

Personajes

Un problema que tiene este primer ejemplo es que se vuelve necesario ingresar repetidamente el nombre de un personaje toda vez que el mismo habla (tal como si fuese un guion de una obra teatral). Naturalmente, hacer esto se voolverá sumamente tedioso, sobre todo si quisiéramos escribir mucho diálogo en nuestra novela. Por suerte es posible también declarar los nombres de personaje al iniciar el guion. Para esto tenemos que definir los personajes por adelantado según la sintaxis de Ren'Py. De esta manera podremos asociar un texto a un nombre abreviado al personaje, y cambiar el color del nombre del personaje, todo al mismo tiempo.

Lo haremos editando nuevamente el guion script.rpy para que ahora quede de esta manera:

define s = Character('Silvana', color="#c8ffc8")
define y = Character('Yo', color="#c8c8ff")
 
label start:
 
    s "¡Como va! ¿Qué tal estuvo la clase?"
 
    y "Buena..."
 
    "No puedo admitir que me entró por un oído y me salió por el otro."
 
    s "¿Te vas a tu casa ahora? ¿Querés que volvamos juntos?"
 
    y "¡Dale!"

De ahora en más, escribir el diálogo entre los dos personajes se volverá más sencillo. La primera y segunda declaración definen al primero y el segundo personaje. Como verán, la primer línea define un personaje con el nombre abreviado de “s”, y su nombre largoSilvana“, con un color de nombre verdoso (los colores se representan con tripletes hexadecimales rojo-verde-azul, al igual que en las páginas web). La segunda línea crea un personaje con el nombre corto ”y“ y el nombre largo ”Yo“. con el color de nombre rojizo. Podrán inventar otros personajes copiando una de las líneas de definición de personaje, y cambiándole su nombre corto, nombre largo y el color.

También modificamos las declaraciones say para hacer uso de los objetos Character en lugar de recurrir a la tediosa cadena de nombre para un personaje.

Ver manual: Defining Character Objects

No sería una novela visual sin que se nos muestren imágenes en la pantalla. Aquí hay otra escena de “The Question”. Esta también incluye declaraciones que muestran imágenes al jugador. Si lo desean probar, pueden reemplazar completamente la sección anterior del guion:

define s = Character('Silvana', color="#c8ffc8")
define y = Character('Yo', color="#c8c8ff")
 
label start:
 
    scene bg meadow
 
    "A poco caminar, alcanzamos el campito justo al lado del barrio donde vivimos."
 
    "Acá es muy lindo todo. El otoño se parece a esos animés coreajaponchinos."
 
    "Cuando éramos chic@s, jugábamos mucho en estos lares, guardo hermosos recuerdos."
 
    y "Ey... Umm..."
 
    show sylvie green smile
 
    "Gira hacia mí y su sonrisa es tan luminosa que siento que mis nervios desaparecen."
 
    "¡Creo que le voy a preguntar...!"
 
    y "Ummm... ¿T-te gustaría..."
 
    y "¿Te gustaría hacer el arte para mi novela visual?"
 
    show sylvie green surprised
 
    "Silencio."

Este segmento de guion introduce dos declaraciones nuevas. La declaración scene de la línea 6 borra todas las imágenes y presenta solamente una imagen de fondo. Las declaraciones show de las líneas 16 y 26 hacen aparecer en pantalla un sprite (una gráfica activable) encima de la imagen de fondo, y modifican este sprite, respectivamente.

En Ren'Py, cada imagen consta de un nombre. El nombre consiste de una etiqueta, y opcionalmente de uno o más atributos. Tanto la etiqueta como los atributos deben empezar con una letra, y sólo pueden contener letras, números y guiones bajos. Por ejemplo:

  • En la declaración scene de la línea 6, la etiqueta es bg y su atributo es meadow. Por convención, las imágenes de fondo usan la etiqueta bg (por "background", o sea "fondo" en inglés).
  • En la primer declaración show en la línea 16, la etiqueta es sylvie, y los atributos son green y smile.
  • En la segunda declaración show de la línea 26, la etiqueta es sylvie y los atributos son green y surprised.

En cada momento dado, sólo puede aparecer una imagen con una etiqueta dada. Si se presenta una segunda imagen del mismo nombre, esta reemplazará a la primera (tal como sucede en la línea 26 del guion).

Ren'Py buscará el fichero de imagen en el subdirectorio de imágenes, que puede localizarse seleccionando “Imagenes” en la sección ”Abrir Directorio“ del Lanzador de Ren'Py. Ren'Py es capaz de usar arte de personajes que se encuentren en formato PNG, WEBP, o AVIF, mientras que el arte del fondo puede estar en formato JPG, JPEG, PNG, WEBP, o AVIF. También existe soporte para archivos SVG, aunque estos se utilizan fundamentalmente para personalizar la interfaz de usuario. Es muy importante el nombre de archivo: puesto que la extensión no se usa, el nombre de archivos se convierte forzadamente a minúsculas, y se emplea el resultado como nombre de la imagen.

Por ejemplo, los siguientes archivos - localizados en el directorio de imágenes - definen las siguientes imágenes:

  "bg meadow.jpg" -> bg meadow
  "sylvie green smile.png" -> sylvie green smile
  "sylvie green surprised.png" -> sylvie green surprised

Puesto que los nombres de archivo están en minúscula, también lo siguiente se mantiene:

  "Sylvie Green Surprised.png" -> sylvie green surprised

Las imágenes también pueden ser colocadas en subdirectorios (subcarpetas) contenidas en el directorio de imágenes. El nombre de directorio resultará ignorado y sólo se usará el nombre de archivo para definir el nombre de imágenes.

Ver manual: Displaying Images

Declaración Hide

Ren'Py también soporta una declaración hide, que oculta una imagen dada. Por ejemplo, agreguemos esto al final del guión script.rpy en el que estamos trabajando, y lo probamos con Ejecutar Proyecto:

label irse:
 
    s "¡Me voy a encargar ahora mismo!"
 
    hide sylvie
 
    "..."
 
    y "¡No era eso a lo que me refería!"

En realidad es bastante raro usar hide. Os será posible usar show cuando un personaje cambia de emociones, mientras que scene se utiliza en los momentos en los cuales todos los personajes se retiran de la escena. Sólo es necesario usar hide cuando un personaje abandona la escena, pero el resto de la escena y los demás personajes tienen que permanecer en ella de la misma manera.

Declaración Image

A veces, es posible que no queramos dejar que Ren'Py defina las imágenes automáticamente por sí mismo. Para esto se usa la declaración image. Debería estar en el nivel superior del fichero (sin sangrado y antes del label start), y puede usarse para mapear un nombre de imagen a un fichero de imagen específico. Por ejemplo

image logo = "renpy logo.png"
image eileen happy = "eileen_happy_blue_dress.png"

La declaración image se ejecuta al tiempo de inicio, antes que label start y del resto del guion del juego con que interactúa el jugador (la declaración image también puede ser utilizada para llevar a cabo tareas mas complejas, pero esto se tratará aparte).

Transiciones

Según se ha venido obrando, las imágenes aparecen y desaparecen de forma instantánea. Puesto que a efectos del relato es importante cambiar la locación y hacer que un personaje entre o salga de escena, Ren'Py soporta lo que se conoce como transiciones, que permiten aplicarse cuando los personajes presentan modificaciones.

Las transiciones modifican lo que se muestra, desde el momento de lo que sucedía al final de la última interacción (diálogo, menú o transición - entre otras declaraciones) hasta la apariencia luego de que se han ejecutado las declaraciones scene, show y hide.

label start:
 
    scene bg meadow
    with fade
 
    "A poco caminar, alcanzamos el campito justo al lado del barrio donde vivimos."
 
    "Acá es muy lindo todo. El otoño se parece a esos animés coreajaponchinos."
 
    "Cuando éramos chic@s, jugábamos mucho en estos lares, guardo hermosos recuerdos."
 
    y "Ey... Umm..."
 
    show sylvie green smile
    with dissolve
 
    "Gira hacia mí y su sonrisa es tan luminosa que siento que mis nervios desaparecen."
 
    "¡Creo que le voy a preguntar...!"
 
    y "Ummm... ¿T-te gustaría..."
 
    y "¿Te gustaría hacer el arte para mi novela visual?"

La declaración with acepta el nombre de la transición a emplear. La más común es dissolve (que precisamente disuelve de una pantalla a la siguiente). Otra transición útil es fade (que desvanece la pantalla a negro, y luego la desvanece a la siguiente pantalla). Si establecemos una transición tras un bloque de múltiples declaraciones scene, show o hide, se aplicará a todas ellas a la vez. Por ejemplo, si programamos un bloque así:

    scene bg meadow
    show sylvie green smile
    with dissolve

...tanto las imágenes ”bg meadow“ y ”sylvie green smile“ se disolverán al mismo tiempo. Para disolver una por vez, se volverá necesario programarlo usando un bloque de dos declaraciones with:

    scene bg meadow
    with dissolve
    show sylvie green smile
    with dissolve

...esto disolverá primero el fondo del prado, para luego discolver la gráfica de Silvana. 

Si quisiéramos mostrar instantáneanente el prado, pero luego presentar la gráfica de Silvana con la transisión disolve más suave, deberíamos programarlo en bloque así:

    scene bg meadow
    with None
    show sylvie smile
    with dissolve

El None se ha utilizado aquí para indicar una transición especial que actualiza la idea de Ren'Py de que era la pantalla anterior (sin mostrarle nada al jugador).

Ver manual: Transitions

Posiciones

Por defecto, las imágenes se presentarán centradas horizontalmente, y con su borde inferior tocando el borde inferior de la pantalla. Esto suele venir bien para fondos y personajes únicos, pero al presentar más de un personaje (para hacer grupos, por ejemplo) probablemente guarde más sentido colocarlos en distintas posiciones en la pantalla. También puede tener sentido reposicionar un personaje según convenga en el relato.

     show sylvie green smile at right

Para hacer este reposicionamiento, agrega una clausula at a la declaración show. La cláusula at recibe una posición, y presenta la imagen en dicha posición. Ren'Py incluye varias posiciones predefinidas: left para el lado izquierdo de la pantalla, right para el lado derecho, center para centrarlo horizontalmente (el valor por defecto) y truecenter para que la centre horizontalmente y verticalmente.

Los creadores puede incluso definir sus propias posiciones, y hacer eventos con movimientos complejos, pero esto cae por fuera de este tutorial rápido

Ver manual: Transforms

La mayoría de los juegos de Ren'Py cuentan con música de fondo. La música se reproduce con la declaración play music seguida por un nombre de archivo que es interpretado como un fichero de audio que debe ejecutarse. Los ficheros de audio se interpretan en relación al directorio de juego. Los ficheros de audio deben encontrarse en formato opus, ogg vorbis, o mp3.

Por ejemplo:

    play music "audio/illurock.ogg"

Al cambiar la música, se puede indicar una cláusula fadeout o fadein, que se usan para desvanecer el volúmen de la antigua música y aumentar el volúmen de la música nueva (que cumple la función de lograr una transición suave de  temas musicales).

    play music "audio/illurock.ogg" fadeout 1.0 fadein 1.0

La declaración queue music se utiliza para reproducir un fichero de audio no bien termine el fichero de audio que está reproduciéndose (de este modo se puede hacer una especie de playlist).

    queue music "audio/next_track.opus"

Si en la escena necesitamos detener la reproducción musical, podremos hacerlo mediante la declaración stop music (capaz también de recibir una cláusula fadeout opcional).

    stop music

Los efectos de sonido (y en el mejor de los casos, los doblajes de voz) pueden reproducirse con la declaración play sound. A diferencia de la música, los efectos de sonido no se reproducen en bucle sinfín.

    play sound "audio/effect.ogg"

Cuando disponemos los archivos de audio en el directorio game/audio, se pueden lusar los nombres sin aclarar la extensión de archivo (al estilo de una variable de Python, que comienza con una letra, y contiene sólo letras, números y guiones bajos). En tal caso, nos será posible reproducir tal fichero sin poner las comillas.

Por ejemplo, si contamos con un archivo de audio game/audio/illurock.ogg, podremos programar:

    play music illurock

Ver manual: Audio

La declaración pause hace que el guión de Ren'Py haga una pausa hasta hacer clic con el mouse.

    pause

Si le indicamos un número, la pausa finalizará automáticamente una vez que transcurra dicho número de segundos.

    pause 3.0

Podremos decretar la finalización del guion de la novela visual mediante la declaración return, sin tener que llamar a nada. Antes de hacer esto, es mejor poner algo en el juego que indique que el juego terminó (tal vez aclarando un número de finalización o un nombre de finalización al usuario).

    ".:. Final Feliz."
 
    return
Esto es todo lo que tenemos que hacer para guionar un relato cinético, que resulten en un juego lineal, sin ningún tipo de opción que seguir en él.

Ahora veremos lo que se necesita para hacer que un juego que presente menúes con opciones para que el usuario opte interactivamente. Estas permitirán trazar diferentes senderos o caminos, si es que queremos permitir seguir distintos desarrollos argumentales arbolados.

La declaración menu te permite presentar una opción al jugador:

    s "Yo te ayudaría, pero ¿qué es una \"novela visual?\""
 
menu:
 
    "Es un videojuego.":
        jump juego
 
    "Es un libro interactivo.":
        jump libro
 
label juego:
 
    y "Es una especie de videojuego, que jugás en Linux"
 
    jump matrimonio
 
label libro:
 
    y "Es como un libro interactivo que leés en una computadora o un celular."
 
    jump matrimonio
 
label matrimonio:
 
    "Y de esta manera, nos volvimos un dúo creador de novelas visuales."

Este ejemplo presenta un menú que puede usarse con Ren'Py. La declaración menu introduce una opción que podemos seleccionar dentro del juego. Requiere un bloque de líneas sangradas, cada una consiste en una cadena seguida por dos puntos (:). Estas serán las opciones que se le presentarán al jugador aparenciendo en un menú.  Como se ve, cada opción del menú necesita a continuación su propio bloque de líneas sangradas (ya que se ejecutan cuando se eligen dicha opción del menú). En este ejemplo, cada una de las dos opciones del menú ejecuta una única declaración jump, encargada de transfir el control a la etiqueta que se ha definido  a través de la declaración label correspondiente. Esto significa que tras el salto jump del guion, se ejecutarán las declaraciones  que siguen a la etiqueta label determinada.


En el ejemplo anterior, una vez que que Silvana exprese su pregunta, al jugador se le presentará un menú que contiene dos opciones. Si el jugador elige “Es un videojuego”, se ejecuta la primer declaración jump, y Ren'Py saltará a la etiqueta juego. Esto provocará que el Punto de Vista del personaje diga “Es una especie de videojuego, que jugás en Linux”, tras lo cual Ren'Py saltará a la etiqueta matrimonio.

De no existir declaración jump al final del bloque asociado a la etiqueta label, Ren'Py continuará a la siguiente declaración. La última declaración jump es técnicamente innecesaria, pero al incluírsela suele clarificar el flujo del juego.

Será posible definir etiquetas label en cualquier archivo de juego que esté en el subdirectorio game/ y termine con extensión .rpy. El nombre de archivo no importa en Ren'Py, solamente importan las etiquetas contenidas en el. De esta manera, podríamos concebir a los archivos .rpy del subdirectorio game/ como si fueran un  archivo .rpy enorme con el código fuente del juego, en el cual se usan los saltos jump para transferir el control de uno a otros. De esta manera, podremos obtener flexibilidad en la forma en la que organizamos un guion de un juego muy largo.

Ver manual: In-Game Menus y Labels & Control Flow

Si bien resulta posible lograr buenos juegos simples usando las declaraciones que os he explicado, lo cierto es que juegos más abrevados requieren una programación más compleja que almacene datos, a fin de poder recabarlos luego. Por ejemplo, puede tener sentido que el juego recuerde una opción escogida por el jugador, volver a una sección común del guion, y actuar más adelante según la opción escogida anteriormente. Esta es una de las razones por la cual Ren'Py cuenta con soporte de Python integrado.

Flags de apoyo usando las declaraciones Default, Python e If

Aprendamos cómo almacenar un valor en un flag (que contendrá información sobre una elección escogida por el jugador a lo largo de la trama). Para inicializar el flag, debemos utilizar la declaración default antes de la etiqueta label start, por ejemplo:

# True si el jugador ha decidido comparar las novelas visuales con un libro.
default libro = False
 
label start:
 
    s "¡Como están! ¿Qué tal estuvo la clase?"

De esta forma, el flag libro comienza inicializado de forma apagada (con al valor especial False, puesto que al igual que el resto de Ren'Py, es importante definirla según estilo Python, recurriendo a la primer letra en mayúscula). Esto significa que está desactivada. Si el jugador escoge la senda libro, podemos poner el flag en True recurriendo una declaración de asignación estilo Python, de la siguiente forma:

label libro:
 
    $ libro = True
 
    y "Es como un libro interactivo que leés en una computadora o un celular."
 
    jump matrimonio

Debemos observar que todas las líneas que inician con el caracter son interpretadas como declaraciones de Python en lugar de declaraciones de Ren'Py. La declaración de asignación de Python que utilizamos aquí asigna un valor a una variable.

Ren'Py soporta otras formas para incluir Python, tales como las declaraciones multilíneas (tuplas) de Python. Ren'Py soporta Python 2.7, aunque es recomendable programar Python capaz de correr en Python 2 y Phyton 3.

Para recabar el valor almacenado en el flag, recurrimos la declaración if:

if libro:
 
    "Nuestro primer juego se basó en las ideas de Silvana, pero luego se me ocurrieron mis propias historias también."

Si la condición es True (verdadera), se ejecuta el bloque del guión. Si no lo es, se la salteará. La declaración if puede recibir una cláusula else opcional, la cual introduce un bloque de guion alternativo que corre si la condición es False (falsa).

if libro:
 
    "Nuestro primer juego se basó en las ideas de Silvana, pero luego se me ocurrieron mis propias historias también."
 
else:
 
    "Silvana ayudó con el guion de nuestro primer videojuego."

Las variables de Python no están necesariamente limitadas a sus valores simples True/False. También podremos utilizar variables para almacenar el nombre del jugador, los puntajes, o cualquier otro propósito que se nos ocurra. Ya que Ren'Py cuenta con la capacidad de emplear todo el lenguaje de programación Python, es posible hacer muchas cosas más.

Un recurso típico es el subgénero “simdate” o “juego de conquistas”, donde las elecciones del jugador suman o restan puntaje de una o varias variables; de acuerdo al puntaje que vas sumando o restando, resulta posible avanzar en determinadas sendas de la historia.

Ver Manual: Python Statements y Conditional Statements

La Pregunta es una versión traducida pero tiene los puntos básicos de este tutorial de Ren'Py.

Si lo anhelan podrán observar el guion completo de La Pregunta aqui, pegarlo en el editor, y lanzarlo.

En la carpeta game del los proyectos creados, se incluirá las siguientes carpetas y ficheros:

script.rpy Este es el archivo pensado para incluir otros guiones que incluyen un escenario. También se pueden agregar o borrar cualquier .rpy.
*.rpyc Estos ficheros son resultados de la compilación de cada fichero .rpy para reducir el tiempo de carga. No es necesario editar estos archivos sin borrar el fichero .rpy correspondiente.
gui.rpy Las variables de la GUI van definidas aquí.
options.rpy Variables Config y Build, una parte de preferencias y una parte de la GUI de definen aquí.
screens.rpy Las pantallas van definidas en este fichero. Esto se debería editar si deseamos personalizar la GUI en un sentido mas avanzado.
audio/ En este subdirectorio van los ficheros de audio.
cache/ En este directorio van los ficheros de caché. No se necesita editarlos.
gui/ Este subdirectorio incluye imágenes usadas en la GUI.
images/ Este subdirectorio incluye los ficheros de imágenes.
tl/ Este subdirectorio incluye archivos de traducción.

Una vez que programamos nuestra novela visual, existen varias cosas que podemos hacer hacer antes de publicarlo:

Revisar el guion

Desde la primer página del Lanzador, elegi “Revisar guion (Lint)”. Esto depurará el juego en busca de potenciales errores. Como algunos de estos errores sólo afectan a usuarios de otras plataformas, es importante entender y usualmente corregir todos estos errores, incluso si no dan problemas en nuestro sistema específico.

Revisar versiones nuevas de Ren'Py

Periódicamente se lanzan nuevas versiones de Ren'Py en base a correcciones de errores y nuevas funcionalidades. Antes de lanzarlas, querrías hacer clic en Actualizar en el lanzador de Ren'py para bajarte la última versión. También es posible descargar nuevas versiones y ver un listado de cambios en https://www.renpy.org/latest.html.

Raramente los cambios a Ren'Py requieren realizar modificaciones al guion ya terminado, pero de existir incompatibilidades, se listarán allí con los cambios sugeridos.

Compilar distribuciones

Desde la primer página del lanzador, podemos elegir "Compilar Distribuciones". Basado en la información indicada en option.rpy, el Lanzador Ren'Py compilará uno o más ficheros de archivaje comprimidos que contendrán el juego que has programado.

Probar el juego compilado

El depurador Lint incorporado no es substituto para las pruebas completas del juego. Es tu responsabilidad comprobar tu novela visual antes de publicarla. Sin duda que los compañeros podrán darte una mano y te ayudarán a testear la beta de tu juego compilado (a menudo otros encuentran problemas que no hemos visto):

Ya no puede producirse un aumento en gran escala de la producción computacional del Tercer Mundo sin un desarrollo paralelo de los centros de datos correspondientes. Este Tutorial apenas cubre lo básico de lo que es capaz de hacer Ren'Py. Para hacerlo fácil y breve, he omitido muchas funcionalidades que soporta Ren'Py y he simplificado la explicación de otras, enfocándolo en un subconjunto de funcionalidades básicas necesarias para emprender una novela visual.

Si te interesa aprender mas, no dudes en hojear el Manual de Ren'Py, ya que por eso cada byte de metadatos que hoy se dejen arrebatar los Países del Tercer Mundo, equivale a un terabyte de software compilado que dejarán de producir mañana.