chiptune-fm
Me puse a probar una por una las roms, sin jugar aún exactamente, si no probando la lectura del propio Script. Todo excelente, aunque cuando voy a hacer un cambio por ejemplo de Poke Red y Blue que se pueden leer muy bien, a Oro o Cristal, hay que darle Restart al Script, para que no lea extraño. Un errorcito que puede que logres arreglar, o no. Para mí no es importante ya que es cuestión de darle Restart, y ahí está.
Otra cosa, Pokemon Blue y Red me leen las opciones algo raras, no sé si aún no existía la velocidad de texto y recién se introdujo en amarillo porque igual no sale.
De hecho ya pasé el archivo .sab que tenía por continuar de Poke Cristal a ver cómo anda ahora...
Una cosa que se me ocurre para unificar todo, y cuando digo todo es todo, incluídos scrips y roms en ambos idiomas todo junto... No sé, podría ser algo así como un auto rum por línea de comandos en que el usuario pulse, por ejemplo, 1 si quiere jugar en español, 2 si quiere jugar en inglés, 3 si quiere jugar en italiano, y al tipearse la opción correspondiente se cargaría la respectiva rom y el scrip automáticamente... No sé, se me ocurre ya que supongo que el menú de flechas arriba y abajo supongo que será medio compli...
La cosa es que ya tengo acá las 6 roms en español, todo junto son solo alrededor de 12 MB descomprimido,.
Excelente trabajo, obra maestra!
Meta principal cumplida, ahora bien: ¿Cómo sería la cosa con los hacks? Para los coleccionistas frikis que vayamos a querer probar, ya sabes
ambro86
Hola @nuive, en primer lugar muchas gracias, ¡eres un maestro! Me alegro de poder jugar tantas versiones de Pokémon. Acabo de probar la versión Cristallo en italiano. Todo funciona bien, pero el guión no reconoce los caracteres acentuados, como à ù ò è ì. ¡El resto está todo bien!
Yo también había comenzado a traducir Pokémon Gold, pero leí que estás trabajando en ello. Déjame saber si puedo ayudarte de alguna manera, por ejemplo, compartiendo mi traducción de Pokémon Gold.
sanslash332
holi @nuive
Primero que todo felicitaciones, eres el que inaguró (y probablemente esté en esto solo un buen rato) el subforo de lanzamientos jaja.
ya este thread juntó más de 6 páginas, ha generado la mayor actividad del foro en estos últimos meses, así que es absolutamente digno de ser quien inagure el subforo de nuevos lanzamientos. Así que aquí está :3
Bueno. actualicé las descargas de pokemon amarillo y pokemon cristal en tfj redirigiéndolas a un paquetito con los roms, el emulador y el script versión 2.1. Viendo que ahora está la 2.2, tendré q que actualizar nuevamente, pero bueno.
Está el tema que reportó @germanico de que en amarillo al menos, se rompió la compativilidad que antes existía con el townmap. No he podido revisar hasta ahora si otra cosa se rompiópero genial. muy genial :3
A,si sacas más updates, comienza a usar el numerito de patch de la semántica; tipo 2.2.1 y así si lo que se van corrigiendo son pequeños bugs. una 2.3 o así apareserían si se hacen arreglines para uno que otro hack conocido. Que tal como te reportaron, parece que se rompió la compativilidad con algunos.
En fin. maestro, y bienvenido al subforo de lanzamientos. Buena inauguración :3
pd: noooooo! flash al pathfinder nooooooooo. deja al menos esa ventajita de no tener que gastar un slot en esa shititiritit.
Saludos
nuive
¡Hola! Venía a comentar un poco como sigue el desarrollo de todo esto, y me temo que no traigo muy buenas noticias.
Como comenté el otro día, y aunque a partir de ahora siga trayendo pequeñas actualizaciones y arreglos a la versión 2 del script, me metí de lleno con la Game Boy Advance y... bueno, la cosa no pinta muy bien para el desarrollo, la verdad.
Me voy a poner un poquito técnico con todo esto, así que a quien no le interese... se lo puede saltar. Esto es sobre todo, para quien le interese saber por qué a partir de ahora las cosas no serán tan fáciles.
Bien, como algunos ya sabréis, los scripts lua lo que hacen en este caso es meterse en la memoria del emulador, por decirlo de alguna forma, y trabajar con los valores que el juego va devolviendo según avanzamos. En palabras técnicas, estamos prácticamente todo el rato trabajando con la memoria RAM de la consola en cuestión.
Hay partes del script que también acceden a la ROM (lo que son los datos del juego en sí) para obtener cosas como que gráficos son para surfear, sobre cuales se puede caminar y cuales no... Esto en el script se usa, sobre todo, para el movimiento de la cámara y el buscarrutas.
El último tipo de procesos que realiza el script, por decirlo de alguna forma, son la monitorización en tiempo real de la ejecución. Para aclararnos, pongamos el ejemplo de los pasos que reproduce el script al caminar. Si nos limitáramos a leer las coordenadas del jugador de la RAM del juego (primer proceso) y en base a esas coordenadas obtener la posición del jugador en el mapa y acceder a la ROM para saber que tipo de suelo hay que reproducir (segundo proceso) estaríamos oyendo pasos todo el rato siempre que estemos en un mapa, al margen de que el jugador esté caminando o no. En esto consiste el tercer proceso. Monitoriza la ejecución del juego y reproduce un paso solo cuando detecta que el juego está ejecutando la función de caminar.
Ahora bien, lo referente a la Game Boy Advance: los dos primeros procesos los tengo bastante controlados, el problema es el tercero. Por algún motivo que desconozco el sistema de monitorización del motor lua, si bien funciona a la perfección con juegos de GameBoy y GameBoy Color, con la GameBoy Advance está totalmente roto, y hace un poco lo que le da la gana, y la mayoría del tiempo no tiene ni la más mínima idea de qué narices está haciendo el juego.
En base a lo que expliqué anteriormente os podéis plantear, bueno... si esto se utilizaba para los pasos... pues lo dejamos sin el sonido de los pasos, que es lo de menos.
La idea no es mala, y sí, en los juegos de GameBoy y GameBoy Color de Pokémon esta función solo se utilizaba para los pasos. Pero en la GameBoy Advance... hay que recurrir a esto también para el texto.
En GameBoy y GameBoy Color, por lo menos en lo que a Pokémon se refiere, el juego mantiene todo el rato una copia de la pantalla en la memoria RAM. Muy práctico, porque siempre que a nosotros (o al script) le interese podemos acceder a la memoria y tenemos a nuestra disposición esos identificadores que una vez pasan a la pantalla se convierten en letras, dibujos, bordes... y sabemos que siempre en la misma dirección de memoria nos vamos a encontrar eso. En resumen, solo con el primer proceso, tenemos acceso a un pantallazo del juego cuando nos apetezca.
La GameBoy Advance es otra historia. A pesar e disponer de mucha más RAM que la GameBoy, la complejidad de los juegos también aumentó enormemente, y por esto la memoria RAM es compartida por mil y una cosas distintas.
Por este motivo, en estos juegos la copia de la pantalla en RAM solo se encuentra disponible cuando el juego quiere dibujarla en la pantalla. Luego ya la borra.
Con lo cual, lo que tiene que hacer ahora el script lua es monitorizar la ejecución (tercer proceso) y cuando detecte que la pantalla va a cambiar hacerse él una copia de la pantalla para consultarla siempre que quiera (primer proceso).
Y aquí el problema. Como dije, la monitorización de ejecución por parte del motor lua no funciona como debería en GameBoy Advance.
Así que nada, yo sigo investigando. Ya me diréis si os interesa que suelte estas parrafadas por aquí o si a nadie le interesa...
¡Saludos!
Vale, en cuanto pueda la cambio y actualizo a 2.2.1. Aprovecharé ya para incluír nuevos cambios. Ya tenemos versión francesa para la primera generación. En cuanto actualice ya numero como 2.2.1.sanslash332
Buenas @nuive Primero que todo, gracias por el update. voy a descargarlo para probarlo. Porfis ¿podrías renombrarlo como 2.2.1 o 2.2.2 algo así?
más que nada es para poder mantener la nomenclatura correcta y saber que estamos siempre una versión más arriba jaja.
Supongo que todos los cambios están siendo pusheados a cada rato hacia github ¿no?
Si es así ¿por qué se te rompe a cada rato lo del hp en el amarillo? lo corrijes, pero luego lo pasas a llevar nuevamente jajaja.
No, lo de la DS... Fue una barbaridad que se me ocurrió hace años. Edité el código interno del emulador y le hice que reconociera las instrucciones para soltar a lo loco el texto del platino. Pero eso ni vale para varios juegos, ni para varios idiomas, ni para menús... es bastante chapuza.sanslash332
Bueno, ahora por todo el despliegue técnico, o, por favor. sigue haciéndolo. Yo soy computín y @Alisson también, así que creo que al menos a nosotros dos nos interesa, porque lo entiendo bastante bien
Ahora, tengo una duda. respecto al paso tres del monitoreo de la ejecución. ¿Qué es exactamente?
Vigilas el procesador de la GBA y ahí puedes vigilar qué set de instrucciones están llegando por cada clock del procesador? hmmmm
¿No podrías remplasar esto por simplemente polling a la ram?
Sé que es muy costoso, y que puede incluso laguear el juego, pero en el caso de la escritura en pantalla, aunque la ram se limpie, el texto sí o sí tendría que cargarlo el procesador en ram, luego renderizarlo y finalmente borrarlo.
No podrías detectarlo si estás haciendo un polling constante a la ram? y capturar si es que detectas algún cambio que se pueda identificar como texto y no residuos de otras cosas?
Y usar la misma técnica de los pasos; en vez de leer la instrucción caminar, simplemente estar haciendo un polling by frame a la posición actual del jugador en el mapa. Si detectas que dicha posición es reescrita, reproduces el ruido de pasos según la información del tile activo que tengas de antes.
Sé que es poco ineficiente, muy ineficiente porque frame a frame tienes que estar leyendo un montón de bites de la ram, en vez deesperar una instrucción puntual, pero eso podría darte una manera de salir jugando al menos.
Ahora bien... ¿no tiene ejecución de scripts el DSMume?
No puede reproducir GBA ese emulador?
Porque me acuerdo que lograste leer los textos del pokemon platino, usando un script en el DSMume. ¿cuál fue ahí la diferencia?
La DS vuelve a utilizar la técnica de la GBC? o en el DSMume puedes pollear los set de instrucciones del procesador sin tener problemas?
Vaya tema interesante. No soy tan bueno en arquitectura de computadores, pero el tema suena muy genial :3
Eso. si pillo más bugs los reporto en la versión actual (la llamaré 2.2.1) y si tienes más información o novedades, porfa sigue contándolo. que me encanta el tema.
¡saludos!
Germán Schlude
hola @nuive
te quería comentar un error que encontré mientras testeaba un poco pokemon rojo. sencillamente el menú de opciones no funciona bien. es la versión en español por si quieres fijarte. de todos modos es mejor amarillo, pero creí que sería bueno reportarlo.
me gustaría poder ayudarte con GBA, pero no se nada de eso. de todos modos escuchar toda la explicación técnica de como son tus dificultades con respecto a eso me parecen interesantes, así que si quieres postearlas acá, yo las leeré.
gracias por tu esfuerzo!
A ver. El VBA-RR es el único emulador actualmente con soporte de lua para GameBoy/Advance. El problema, como expliqué unos posts atrás, es que la ejecución en la GBA no la monitoriza de manera apropiada. La monitorización la hace, pero no con la precisión que requerirían los juegos de Pokémon. Por lo que pude comprobar, tiene un poco que ver con la velocidad de procesador que se emula. Por ejemplo, en GameBoy/color, con la frecuencia con la que se monitoriza el contador de programa basta para detectar cuando hay que acceder a la RAM. La GBA ejecuta instrucciones a una velocidad mucho mayor, porque su procesador es lógicamente más rápido. Y el problema es que como está programado el VBA (cualquier versión de este emulador) entre monitoreo y monitoreo de lua nos perdemos cosas imprescindibles para accesibilizar estos juegos.ambro86
Hola @Nuive, antes que nada te agradezco porque leí en el foro de audiojuegos que habrá la versión italiana para los pokémon de oro y plata. Busqué qué emuladores admiten Lua Scripts y encontré esto: hasta la tercera generación puede usar VBA. Para el cuarto y quinto lugar se usa DeSmuME_dev. Por cierto lo he probado y también es accesible.