Mensajepor Cthonian Godkiller » Sab, 22 Ago 2015, 13:59
$this->bbcode_second_pass_quote('na_th_an', 'A') ver si el lunes tengo rato y os hago un tutorial sobre como montar el scripting en condiciones. El realidad lo más fácil es compilar el script, obtener el .bin, y meterlo como "PRELOAD" en una de las rams. Eso hace que el script sea el primer binario de la RAM que sea. Por ejemplo, si lo quieres meter en la RAM3, copias script.bin en /bin con el nombre "preload3.bin", y luego ejecutas el librarian. El librarian, como sabéis, lo que hace es ir pegando un binario tras otro y construyendo un índice. Pues bien: al empezar cada RAM (3, 4, 6 y 7, en este orden), lo primero que hace es buscar un archivo "preloadN.bin", lo mete en la RAM, y luego pega tus binarios detrás. (Otra solución, teniendo solo una RAM extra, es meter script.bin en list.txt al principio y listo; el tema de los "preload" es para cuando tienes proyectos con datos fijos en varias páginas).
El tema de la linea del define y tal es, como bien habéis dicho, para poder combinar textos y scripts en un "preload", y calcular así dónde empiezan los scripts (si se ponen tras el texto). La verdad es que eso se hizo porque Ninjajar junta textos y scripts al principio de la página 7 y luego nos ha venido bien para un par de proyectos "on the works", pero no tiene por qué ser así. El motor sólo necesita conocer en qué página está el script y en qué dirección de memoria empieza. Si hemos hecho lo del preload3.bin que expliqué antes, el script estará en la página 3 (esto se pone en config.h) y en la dirección 49152 ($C000), o sea, el principio de la RAM paginada. Así que en el .bat sólo tendremos que poner:
$this->bbcode_second_pass_code('', 'echo #define SCRIPT_INIT 0xC000 >> msc-config.h')
Así el parser sabrá dónde está el script.
Sobre el tema de los binarios, la cosa va así:
- Por fuerza, los tres primeros archivos binarios que debe encontrarse el librarian deben ser title.bin, marco.bin y ending.bin, en ese orden. Estos tres archivos deben ser los primeros que se encuentren en list.txt. Cualquier otro binario que necesites (niveles extra, pantallas comprimidas para las cutscenes...) debe ir detrás.
- Si tienes puesto "DIRECT_TO_PLAY", o sea, tu pantalla de título también contiene el marco del juego, no necesitas que haya nada en marco.bin porque jamás va a intentar descomprimirse este recurso. Por tanto, para ahorrar memoria, lo suyo es crear un archivo marco.bin de 0 bytes y ponerlo en /bin. Una forma muy sencilla de hacerlo es irse a bin, escribir "copy con marco.bin", pulsar ENTER, pulsar F6, y pulsar ENTER. Como marco.bin ocupa 0 bytes, está claro que las direcciones en librarian.h para marco.bin y ending.bin serán la misma, pero eso no debería preocuparos porque, como he dicho, en DIRECT_TO_PLAY el marco.bin nunca se descomprime.
asias nathan, si, lo del marco.bin con 0 bytes ya lo llevaba haciendo desde el g1, lo del preload lo miraré si eso, pq a priori ya funciona como lo estaba haciendo. Lo de los binarios es que se me monto un lio en los que había en dev y los del /bin, pq empezo a hacer cosas raras como poner el ending como menu y volver a jdoer el sonido, aunque ya funciona, tendré que apuntarlo la proxima vez que mi memoria a corto plazo esta muy afectada
![Razz :P](./images/smilies/icon_razz.gif)