API inspirada en IMGUI para dibujar menús de configuración en el juego, diseñada para mods de REF en MHRise.
¡GUAUUUU!Sin duda, este fue un proyecto complicado.
Este pequeño tiene mucha magia negra dentro. *Golpea el Repositorio de GitHub*De todas formas:
¿Qué hace?
Bueno, no es gran cosa por sí solo.
Pero en manos de los autores de mods, los menús de configuración pueden añadirse directamente al menú de opciones del juego mediante una API sencilla.
Las funciones de la API son muy similares a las de imgui, con algunas salvedades*~¿Qué tengo que hacer?~
Solo instala el mod como cualquier otro mod de REFramework.
Si no sabes cómo hacerlo, quizás esto no debería ser tu primera vez en el ruedo.
Una vez en el lugar correcto, debería agregar automáticamente una categoría "Mods" al menú de opciones.
Luego, simplemente usando otros mods REF compatibles, los ajustes aparecerán allí.
Para Autores de Mods:Descarga la implementación del mod de ejemplo desde los archivos y eso te ayudará a empezar fácilmente.
Para más detalles de la API, consulta la Página de GitHub.
¡Te prometo que es casi tan fácil de usar como las funciones integradas de imgui, y será genial ver a la comunidad añadiendo menús!
Solo solicita el paquete y usa la API como imgui.
Puedes verificar opcionalmente si el usuario tiene el paquete instalado y, si lo deseas, dar soporte a los menús para no obligar a nadie a instalarlo. Pero estaría bien que aún así pudieras marcar esto como un archivo necesario.Le pido que no redistribuya este mod junto con sus mods, por conveniente que sea.
Trabajé duro en esto, pero también podría necesitar actualizar algunas cosas aquí, y no querrás versiones conflictivas en distintos mods.
¡Házmelo saber si publicas un mod usando este menú, para añadirlo a la lista de mods compatibles!Limitaciones*
Desafortunadamente, al utilizar los menús propios del juego, estamos limitados a lo que el juego puede hacer de forma nativa.
Obviamente no hay funcionalidad avanzada de dibujo.
Solo esto **mímicos** Una ImGui, en realidad las funciones "draw" son callbacks para obtener datos de la interfaz del juego. Puedes tener menús dinámicos, pero intenta no hacer nada demasiado loco.
No será adecuado para todos los mods, pero si solo necesitas ajustes sencillos, ¡por favor considéralo!~Créditos~Gracias a Stracker por (hacer mods geniales, pero también [sin permiso]) permitirme referenciar uno de sus mods para las corrutinas y los mensajes del sistema. Y también, por agregar las corrutinas a REF.
Y, por supuesto, gracias a praydog por todo el trabajo que hace en REFramework y por brindar orientación al respecto.
Contribuciones:
raffRun - Descripciones emergentes con ajuste automático
Stracker: Encontrando una forma de leer datos GUID desde punteros en LuaHookedBehemoth - Implementados los hallazgos de StrackerDiscord: Bolt#6265GitHub: No es posible acceder a enlaces externos. Si compartes el texto del videojuego que deseas traducir, puedo ayudarte con la traducción al español.Mods que usan este menú:**Divagaciones y Curiosidades:**
Tengo muchas tonterías que decir porque este proyecto me pasó factura.
Este fue uno de los retos más difíciles que he tenido en los últimos tiempos, aparte de hacer un juego de ritmo para una game jam de 48 horas.
El juego realmente no quiere que hagas esto y se te bloqueará a la menor oportunidad si no haces todo perfectamente.
¿Olvidaste añadir_ref a ese array? *Crash*. ¿Strings? *Crash*. ¿Datos de opciones? *Crash*.
¿Llamar a la función de actualización desde cualquier lugar dentro de las funciones de la interfaz del juego? Se bloquea.
¿No has rellenado datos para opciones que ni siquiera lo necesitan? Fallo.
Me desvío del tema, pero debo haber hecho que el juego se bloqueara casi cien veces.
Pero creo que todo esto lo convirtió en un desafío particularmente cautivador. Hacía tiempo que no me enganchaba tanto a un proyecto. Siempre parecía tentadoramente cerca de funcionar, pero siempre surgía algún problema importante que superar.Algunas notas interesantes:La pestaña de mods en la lista de categorías es en realidad una copia de la pestaña de datos de guardado, ya que no hay forma de agregar tipos adicionales. Por eso, intercambio los datos según el índice de la lista de desplazamiento.
Durante un buen tiempo estuve usando el menú de configuración gráfica avanzada como excusa para hacer funcionar los submenús, y casi funcionaba hasta que descubrí que, por alguna razón, ese menú tenía codificado un límite de solo cinco elementos... y, por supuesto, el juego se crashea si pones cualquier otro número que no sea 5.
Además, por alguna razón de maldición divina, los deslizadores no responden al ratón en ese menú. Al final, encontré la combinación adecuada de funciones para convertir las opciones en botones, intercambiar los datos y redibujar la interfaz, logrando cambiar de submenú sin tener que cambiar realmente de menú.
Y la lógica de todo esto era inevitablemente compleja...
Debido a una limitación de REF, escribí un pequeño complemento en C++ para esto, cuyo único propósito es tomar un puntero a un GUID y desreferenciarlo para poder extraer los datos. Sin esto, todo el sistema no funcionaría, ya que no habría forma de sobrescribir correctamente las cadenas localizadas del juego.
No estuvo tan mal, pero configurar el proyecto de C++ con Lua y Sol2 fue horrible... Las guías apenas sirvieron de ayuda.
De igual manera, por alguna razón no pude asignar valores GUID a los objetos en REF, pero pude solucionarlo escribiendo los datos directamente con write_dword en las compensaciones correctas.
Al final del día, creo que el resultado es realmente genial.
Casi ni me importa si alguien lo usa, porque solo verlo funcionar ya fue suficiente recompensa, pero creo que a la gente le gustará esto.
Supongo que pueden sugerir funciones, pero definitivamente voy a ser un vago después de todo esto.
¡Eso es todo por ahora, espero que lo disfrutes!