HiddenChest
HiddenChest es un proyecto basado en mkxp desarrollado por Ancurio. Les permite jugar videojuegos basados en RGSS con una resolución de al menos 800 * 608 o superior por defecto, pero pueden cambiarlo antes de compilarlo de ser necesario. En mi caso yo definí la máxima en 1920 * 1080, aunque solo lo he llegado a probar a 1680 * 1050 a lo sumo. Los resultados fueron bastantes decentes.
Después de que hayan finalizado la compilación del ejecutable binario, deberían de abrir el archivo de texto MapCustomResFixes (para juegos de RMXP o RMVX) con un editor como Notepad++ o cambiar su extensión a txt si buscan usar la aplicación de Windows llamada Notepad. En distribuciones de Linux pueden utilizar su editor de texto favorito, para un GUI de KDE Kate o KWrite estarían bien. Una vez que lo hayan abierto, copien su contenido y péguenlo en el editor de scripts debajo de Scene_Debug y sobre Main.
¡El método Sprite#mirror_y
alias Sprite#flip_y
ha sido añadido!
Excepto por muchas herramientas de scripting, las opciones de apertura de ventanas (ya dentro del juego), la resolución incrementada, el reflejo del eje Y en imágenes, el teclado completo y varios arreglos de errores, este proyecto retiene mucho del mkxp original.
La documentación de mkxp aún es válida en buena medida por lo que podrían revisarla.
mkxp es un proyecto que busca proveerles una implementación de código abierto (open source) de la interfaz de Ruby Game Scripting System (RGSS) usada en el popular software de creación de juegos "RPG Maker XP", "RPG Maker VX" y "RPG Maker VX Ace" (marcas registradas de Enterbrain, Inc. o Kadokawa), con enfoque en Linux principalmente. La meta es correr los juegos creados con aquellas aplicaciones de forma nativa esperando no tener que cambiar ningún archivo.
Está bajo la licencia GNU General Public License v2+.
Linux (32bit/64bit) OSX por Ali Windows (mingw-w64 32bit)
HiddenChest: Binarios Precompilados con +800px de Ancho
Ubuntu or Fedora 64bit Windows 64bit
Si planeas depender de juegos con un ancho de 640 píxeles wide games, deberían de ir tras mkxp.
Bindings les proveen de código para unir un lenguaje interpretado como Ruby con un ambiente capaz de correr scripts de juegos. Actualmente hay tres bindings:
Página Web: https://www.ruby-lang.org/en/
Matz's Ruby Interpreter, también llamado CRuby por su API escrita en C, es la versión de Ruby más distribuida por la red. Si están interesados en correr juegos creados en RPG Maker XP u otros, deben de escoger esta opción. MRI 1.8 fue lo que se utilizó en RPG Maker XP; sin embargo, este binding se escribió contra el 2.6 (la versión estable en la actualidad). Para juegos que solo usen los scripts por defecto provistos por Enterbrain, este binding funciona bastante bien.
Noten que hay diferencias en el lenguaje y la síntaxis entre 1.8 y 2.6, así que scripts creados por algún usuario tal vez no funcionen correctamente. La version 2.6 no los perdonará si usan la vieja síntaxis como en los condicionales case en los que se acostumbró a dejar : dos puntos después de una condición when condition, por ejemplo: when 2 : call_battle. Esos dos puntos deben ser reemplazados por la palabra reservada then
para mantener la compatibilidad con posteriores versiones de Ruby.
Para leer una lista de diferencias, visiten: http://stackoverflow.com/questions/21574/what-is-the-difference-between-ruby-1-8-and-ruby-1-9
Este binding soporta RGSS1, RGSS2 y RGSS3.
Página Web: https://github.com/mruby/mruby
mruby es un nuevo proyecto de Matz y otros para crear una implementación de Ruby más ligera, que se adhiera a las especificaciones y embebible. Pueden verlo como la versión Ruby de Lua.
Debido a las serias diferencias entre mruby y MRI como a la carencia de módulos, correr juegos de RPG Maker con este binding fallará muy probablemente. Se les ha provisto como código experimental. Pueden, por ejemplo, escribir sus propios scripts de Ruby scripts y ejecutarlos.
Algunas extensiones a las clases/módulos estándares les han sido provistas, tomando el archivo de ayuda CHM de RPG Maker XP como una casi "referencia". Esto incluye Marshal, File, FileTest y Time.
Este binding solo soporta RGSS1.
Importante: Si deciden utilizar oniguruma regexp gem de mattn, no olviden agregar -lonig
a las flags del linker para previnir horribles reescrituras de símbolos en libc.
Ha sido reportado que el Array de mruby no soporta variables de instancia y el método puts despliega sus argumentos como un arreglo sin ningún salto de línea.
Este binding solo existe para propósito de pruebas y no hace nada (el engine se cierra inmediatamente). Puede ser utilizado para cosas como ejecutar un bucle de juego de RGSS mínimo de forma directa en C++.
- Boost.Unordered (solo headers)
- Boost.Program_options
- libsigc++ 2.0
- PhysFS (más reciente hg)
- OpenAL
- SDL2*
- SDL2_image
- SDL2_ttf
- SDL_sound fork de Ancurio
- vorbisfile
- pixman
- zlib (solo bindings de Ruby)
- OpenGL header (alternativamente GLES2 con
DEFINES+=GLES2_HEADER
) - libiconv (en Windows, opcional con INI_ENCODING)
- libguess (opcional con INI_ENCODING)
(* Para que el menú F1 funcione correctamente en Linux/X11, necesitan el más reciente hg + este parche)
HiddenChest y mkxp pueden emplear el sistema de compilación qmake de Qt, así que necesitarán instalarlo de antemano. Alternativamente pueden compilarlo con cmake con éxito y hasta compilarlo para otros sistemas operativos.
qmake usará pkg-config para localizar las respectivas rutas de include y lib. Si han instalado algunas dependencias con prefijos no estándares, asegúrense de ajustar su variable PKG_CONFIG_PATH
a sus necesidades.
Sobre Boost sírvanse leer la sección de Boost en esta guía.
Pueden compilar con CMake al ejecutar mi script de bash compile.sh en su terminal al digitar lo siguiente en el directorio raíz de su proyecto:
./compile.sh
Podrían necesitar el uso del comando chmod +x compile.sh para convertirlo en un script ejecutable antes de correrlo.
Creará un directorio build donde ejecutará CMake y luego correrá make para compilar el binario de HiddenChest. Si tienen éxito, trasladará el ejecutable binario a la raíz del directorio por ustedes.
Tomen en cuenta que necesitarán el fork de Ancurio de SDL_sound, ya instalado en su sistema. El administrador de paquetería de su Sistema Operativo, ya sea pacman o apt-get o yum, podría ofrecerles la instalación de una versión por defecto de SDL_sound. ¡NO LO INSTALEN! Tanto HiddenChest como mkxp ¡fallarán de seguro si no siguen mi consejo!
Busquen set(MRIVERSION
en el archivo CMakeLists.txt para fijar una versión diferente de Ruby. Por defecto fijé la 2.6.
La excepción es boost, lo que es raro porque aún no ha logrado que incorporen soporte de pkg-config (¿En serio?). Si han instalado boost en un prefijo no estándar, necesitarán pasar su dirección de include path via BOOST_I y su biblioteca (library) via BOOST_L, ya sea como argumentos directos a qmake (qmake BOOST_I="/usr/include" ...) o via variables del entorno. Pueden especificar un sufijo de biblioteca como "-mt" via BOOST_LIB_SUFFIX de ser necesario.
El soporte de Midi está habilitado por defecto y requiere de fluidsynth a la hora de ejecución (no para compilarlo). Si HiddenChest no puede hallarlo al ejecutarse, la reproducción de midi se deshabilita. Buscará libfluidsynth.so.1
en Linux, libfluidsynth.dylib.1
en OSX y fluidsynth.dll
en Windows, así que asegúrense de tener uno en la configuración de sus directorios. Si necesitan que fluidsynth sea enlazado estrechamente al engine al compilarlo, incluyan CONFIG+=SHARED_FLUID
. De compilar fluidsynth por ustedes mismos, pueden deshabilitar casi todas las opciones (controladores de audio, etc.) ya que no se usarán. Noten que upstream fluidsynth ofrece soporte de compartir datos de un soundfont entre sintetizadores (HiddenChest usa múltiples sintetizadores), por lo que si su consumo de memoria llega a ser muy alto, podrían querer compilar fluidsynth desde su git master.
Por defecto HiddenChest cambia a la carpeta donde su binario se halla y entonces allí comienza a leer la configuración y resuelve las rutas relativas. En el caso de que eso sea indeseable como cuando el binario debe de instalarse globalmente, en una ubicación de solo lectura, puede ser deshabilitada al agregar DEFINES+=WORKDIR_CURRENT
a los argumentos de qmake.
Para detectar automáticamente el encoding del título del juego en Game.ini
y convertirlo automáticamente a UTF-8, compilen con CONFIG+=INI_ENCODING
. Requiere de una implementación de iconv y libguess. Si el encoding es detectado incorrectamente, pueden fijar la seña "titleLanguage" en el archivo hiddenchest.conf.
Binding de MRI: pkg-config buscará ruby-2.6.pc
, pero puede ser reemplazado por otra versión con MRIVERSION=2.2
('2.2' sería el ejemplo). Este es el binding por defecto, así que no se necesitan argumentos para qmake (BINDING=MRI
para ser más claros).
Binding de MRuby: coloque la carpeta "mruby" dentro del proyecto y compílenlo primero. Agreguen BINDING=MRUBY
a los argumentos de qmake.
Binding Null: Agreguen BINDING=NULL
a los argumentos de qmake.
Dependen de las bibliotecas auxiliares de SDL2. Para una mejor adherencia a RGSS, compilen SDL2_image con soporte de png/jpg y SDL_sound con soporte de oggvorbis/wav/mp3.
Para ejecutar HiddenChest, deben de tener una tarjeta o placa gráfica capaz de correr al menos OpenGL (ES) 2.0 con un controlador actualizado ya instalado.
Para simplificar el hackeo, Ancurio ha ensamblado un paquete que contiene todas las dependencias para compilar mkxp en un sistema Ubuntu 12.04 de 64 bit fresco, pero yo compilo HiddenChest en una instalación de Ubuntu 18.04 LTS de 64 bit. La compatibilidad con otras distribuciones de Linux no ha sido comprobada. Pueden descargarlo desde here. Lean el archivo "README.txt" para más instrucciones.
HiddenChest lee los datos de configuración del archivo "hiddenchest.conf". El formato es de tipo ini. No usen comillas alrededor de las rutas de archivos (los espacios no lo interrumpen). Las líneas que comienzan con '#' son simples comentarios. Vean 'hiddenchest.conf.sample' para una lista de entradas aceptables.
All option entries can alternatively be specified as command line options. Any options that are not arrays (eg. RTP paths) specified as command line options will override entries in hiddenchest.conf. Note that you will have to wrap values containing spaces in quotes (unlike in hiddenchest.conf).
La síntaxis es: --<option>=<value>
Ejemplo: ./hiddenchest --gameFolder="mi_juego" --vsync=true --fixedFramerate=60
HiddenChest no viene con una soundfont por defecto, así que deben de suplirla ustedes mismos (fijen su dirección en el config). La reproducción ha sido probada y debería reproducir bastante bien todos los recursos del RTP.
Pueden utilizar esta soundfont de dominio público: GMGSx.sf2
En la versión de RMXP del RGSS, las letras o fuentes o tipos se cargaban directamente desde las rutas específicas del sistema, lo que implica que debían instalarse para estar disponibles en sus juegos. Como eso es un dolor gigantesco que depende de cada plataforma, se decidió que se implementaría la conducta que gracias a Enterbrain se agregoó a RPG Maker VX Ace: cargar las fuentes se realiza al buscar la carpeta llamada "Fonts", lo cual obedece a la conducta por defecto de búsqueda de rutas como que pueda estar ubicada en la carpeta del juego o de un RTP).
Si una fuente solicitada no es hallada, no se genera ningún error. En su lugar una fuente preincluida es utilizada, actualmente es "FreeSans".
- Reproducción de vídeos
- Archivos de audio WMA
- La clase de Ruby llamada Win32API (por razones obvias)
- Creación de Bitmaps con tamaños superiores al límite de textura de OpenGL (Probablemente sea de cerca de 8192 en algunas tarjetas o placas.)
* Existe una excepción llamada mega surface (mega superficie). Cuando un Bitmap mayor al límite es creado desde un archivo, no se guarda en el VRAM sino en el RAM. Su único propósito es el de ser usado como bitmap de tileset. Cualquier otra operación realizada en ella (además de usar blitting en un Bitmap común) generará un error.
Para aliviar la posible incorporación de scripts demasiado dependientes de la clase Win32API, se han añadido ciertas funcionalidades que no hallarán en las especificaciones de ningún RGSS. Actualmente esto comprende lo siguiente:
- Un módulo especial ha sido incluido, es
HIDDENCHEST
. Sus constantes consisten deAUTHOR
,VERSION
,RELEASE_DATE
, yDESCRIPTION
. - La constante
OS::NAME
permitirá a scripts de Ruby saber si su Sistema Operativo es una distribución de Linux o Windows. - Expandidos tilesets de RGSS1 para llenar la pantalla con una mayor resolución de pantalla y adapta las configuraciones de Window_Message a dicho tamaño.
- Cuando se ejecutaba un exe de Windows que tenía una resolución idéntica a la del sistema operativo, el juego automáticamente corría en modo de pantalla completa. Ese no era el caso de los binarios de Linux. HiddenChest ahora soporta este comportamiento en todas las plataformas.
- Implementación de window openness (apertura y cierre de ventanas) en juegos de RMXP sin afectar las que existieran en VX y VX Ace. Funciona de una forma algo diferente a la de VX Ace como el uso de valores en un rango de 0 a 100 cuando en VX Ace se requería de un máximo de 255.
- Hay 4 modos disponibles para asignar a la opción
self.open_mode
como lo son:- nil o false o true - nada pasa jamás
- :top - la ventana se estira desde los extremos superior e inferior
- :center - la ventana se abre como un rollo en direcciones este y oeste
- :bottom - la ventana parece crecer como una planta
- Tengan en cuenta que la orden
Window#open
será ignorada si un valor booleano es fijado como valor actual deWindow#open_mode
. - Pueden fijar el valor de
Window#open_mode=
antes o después de que la ventana haya llamado a su superclase viasuper
al inicializarse o crearse dicha ventana. - Solo el último valor asignado a
Window#open_mode=
será tomado en cuenta por el engine.
- Tengan en cuenta que la orden
- Tanto
Window#set_xy(newx, newy)
comoSprite#set_xy(newx, newy)
les permiten asignar ambas coordenadas cartesianas al mismo tiempo. - Asignen un Viewport a cualquier ventana de RGSS1 usando
Window#viewport = un_viewport
- Se soportan muchas más teclas como PrintScreen, Return o Enter o LeftShift o RightAlt o NumPadDivide * o KeyH o KeyM o desde N1 hasta N0 para los números ubicados sobre las letras comunes como N y muchas más.
- Clases
Bitmap
,Sprite
yWindow
ahora soportan clics del ratón! Bueno lo hacen indirectamente... Necesitarán usar el arreglo@area
con cada una de las dimensiones x, y, ancho y altura. Usualmente lo harían enWindow_Selectable
y sus subclases en el método refresh. Los siguientes llamados a script pueden ser utilizados en scripts de escenas:Bitmap#alpha_pixel?(x, y)
- Pixel con alfa de 0. ¡No es solo para clics!Sprite#mouse_above?
aliasSprite#mouse_inside?
- Ratón sobre SpriteSprite#mouse_above_color?
- Ignora píxeles con valor alfa de 0.Window#mouse_above?(indice_de_opcion)
aliasWindow#mouse_inside?(indice_de_opcion)
- Ratón sobre Ventana
- Clase
Bitmap
soporta el método 'invert!'. ¡Invertirá los colores actuales del Bitmap en instantes! - ¡El engine se engalana con la clase totalmente nueva de
MsgBoxSprite
!bitmap
maneja sus contenidos básicos, los usuales.bar_bitmap
está hecho de una barra de título como en Windows y KDE y GTK.close_icon
no es más que el ícono donde hacen clic para cerrar la ventana!contents
representa al contenedor de todos los mensajes de textos impresos en ella!
- Módulo
Graphics
tiene tres propiedades adicionales:fullscreen
representa al modo actual de pantalla completa (true
= pantalla completa,false
= en ventana),show_cursor
esconde el cursor del Sistema Operativo de estar dentro de la ventana de juego si se fija enfalse
yblock_fullscreen
(true
ofalse
) impedirá o permitirá que el jugador entre en modo de pantalla completa incluso si cambian la configuración en el archivo de configuración hiddenchest.conf. - Módulo
Graphics
también permite hacer capturas de pantalla al llamar al métodosave_screenshot
(guardado en la carpeta Screenshots) u obtener su ancho y su altura en un arreglo condimensions
. - Módulo
Settings
permite personalizar las configuraciones de su juego via llamados a script.image_format
yimage_format=
permiten verificar o asignar el formato preferido de imágenes para sus capturas. Opciones disponibles:- :jpg o 0 para formato JPG - opción por defecto
- :png o 1 para formato PNG
snapshot_dir
ysnapshot_filename
para definir la carpeta y el nombre base de los archivos de capturas de pantalla.save_dir
ysave_filename
para definir la carpeta y el nombre base de los archivos de partidas guardadas.auto_create_dirs
para que se creen las carpetas si cambiaron la ruta de alguna de las carpetas.
- Módulo
Game
incluye las constantsTITLE
yVERSION
. Estas son extraídas del archivo Game.ini - Módulo
Backdrop
, disponibles en todas las versiones de RGSS, permite crear una captura temporal del mapa previo para usarlo como fondo de una escena distinta. Usen cualquiera de los siguientes llamados para crear el bitmap que necesitarán en su escena personalizada. Después pueden asignarle su bitmap a una variable de @instancia de su elección al llamar a su métodobitmap
obitmap_dup
(duplicado). Luego de congelar la escena conGraphics.freeze
, llamen aclear_bitmap
para desecharlo apropiadamente o desechen el bitmap de su sprite directamente en caso de que deseen guardarlo para más adelante y hayan utilizado el métodobitmap_dup
anteriormente.keep_bitmap
- Su mapa sin efectos especialesgray_bitmap
- Versión en Gris de su mapasepia_bitmap
- Versión en Sepia de su mapablur_bitmap
- Versión Borrosa de su mapacolor_bitmap
- Escojan un color para teñir su mapa. Opciones: :red, :green, :blue, :yellow, :sepia and :gray (rojo, verde, azul, amarillo, sepia y gris)
- Sprites ahora soportan versiones en gris y tono sepia de sus bitmaps! Usen un booleano (true o false) para activar o desactivarlos efectos de color.
gray_out = booleano
- gristurn_sepia = booleano
- sepiainvert_colors = booleano
- inversión de coloresgrayed_out?
- Para preguntar si ya está en tonos de grissepia?
- Para preguntar si ya tiene un tono en sepia.colors_inverted?
- Por si neceistan verificar si los colores fueron invertidos
- Usen el método
module_accessor
para crear métodos de módulo, getters y setters ¡todo en uno! Ejemplo:module_attr_accessor :meow
creará los métodosself.meow
yself.meow=(valor)
en un solo paso. Sus setter y getter sonmodule_writer
ymodule_reader
respectivamente. - Módulo
Scripts
permite que guarden en una cadena de texto o String de Ruby o en un símbolo como un ID de script viaScripts << :nombre_script
. Una vez que sean guardados allí, podrán llamar métodos comoScripts.all
oScripts.include?(:nombre_script)
para acceder a los IDs de arreglos (arrays) o confirmar si ya los han incluido. RPG::Weather.sprite_max = numero
. donde numero es un número entero positivo, permite que definan el máximo de sprites de clima como los de efectos de lluvia o tormenta o nieve. Actualmente está fijado en 400 sprites, pero puede ser elevado o disminuido cuando sea necesario.- Clase
FileInt
permite que pregunten si un archivo existeexist?
incluso si está comprimido en el RGSSAD. - Módulo
Audio
incluye más métodos comobgm_volume
,bgs_volume
,se_volume
yme_volume
.
- La familia de funciones
Input.press?
acepta varias constantes adicionales:MOUSELEFT
oMouseLeft
MOUSEMIDDLE
oMouseMiddle
MOUSERIGHT
oMouseRight
- Funciones adicionales:
mouse_x
ymouse_y
para preguntar por la posición del puntero del ratón relativo a la pantalla de juegodir4?
ydir8?
para evitarles el uso de 4 u 8 condicionales en fila.press_all?
ytrigger_any?
para evitarles el uso de varias condicionales en fila.- Pueden pasar un argumento tras otro o pasar un Array alias arreglo.
left_click?
,middle_click?
yright_click?
- Se pueden usar :símbolos en todas las versiones de RGSS.
- Les permite usar varios métodos nuevos que manejan valores booleanos (true o false) y tamaños (Integer o entero)
underline
- booleano - subrayadostrikethrough
ostrikethru
- booleano - tachadono_squeeze
- booleano, valor por defecto: falseoutline_size
- entero entre 1 y 8 - grosor del contornoshadow_size
- entero entre 1 y 3 - grosor del contornoshadow_color
- Color en formato RGBA (Rojo Verde Azul Alfa)
Lista de Arreglos de Errores en HiddenChest
- Depurado error por el que el windowskin desaparecía para todas las ventanas existentes en la misma escena o menú si solo una de ellas era desechada con dispose.
- Arreglado error por el que se notaba que las teclas ALT, CTRL y SHIFT se revisaban continuamente de forma indeseable y sin motivo.
- Arreglado el error del Reinicio del F12 de forma ¡permanente!
- Arreglada la clase Sprite al prevenir que fijara un bitmap no existente o nil como si fuera el bitmap original cuando nunca había sido modificado para ver efectos de tonos de gris o sepia.