Página 8 de 18

Re: MK2 Game - Harbinger (128k)

Publicado: Vie, 21 Ago 2015, 14:01
por Cthonian Godkiller
Voy a empezar a hacer pruebas con el script, y al activar las directivas salta esto :

$this->bbcode_second_pass_code('', '
sccz80:"mainloop.h" L:336 Error:#42:Unknown symbol: SCRIPT_INIT
')

Se soluciona activando esto en el make.bat

$this->bbcode_second_pass_code('', '
rem If scripts and texts are going to share the same RAM page, use this line
rem (for 128K games)
rem This calculates an offset for the scripts binary automaticly.
rem ..\utils\sizeof.exe ..\bin\texts.bin 49152 "#define SCRIPT_INIT" >> msc-config.h
')

pero el tema es que yo no uso los textos en el extern, al compilar se queda pillado en el menú. :(

es posible que sea por la manera que tiene de gestionar el script en 128k en MK2 ?

Re: MK2 Game - Harbinger (128k)

Publicado: Vie, 21 Ago 2015, 17:00
por elborra
Si hay... la cuestión es que no estoy muy seguro si no lo hacia automáticamente ya. Supongo que no. De todas formas la solución es muy sencilla:

En make.bat, justo despues de la linea compilar el script con msc3.exe tendrás que definir:
$this->bbcode_second_pass_code('', 'echo #define SCRIPT_INIT XXXXX >> msc-config.h')
Para añadirle al fichero msc-config.h (que genera msc3) la posición de memoria del script. Para sacar XXXXX abre librarian.h y mira en que posición está el fichero binario del script. (la dirección obviamente, no la página; la página se tiene que indicar en un #DEFINE que tiene config.h)

Todo esto no hace falta... vuelve a dejarlo comentado
$this->bbcode_second_pass_quote('Cthonian Godkiller', '[')code]
rem If scripts and texts are going to share the same RAM page, use this line
rem (for 128K games)
rem This calculates an offset for the scripts binary automaticly.
rem ..\utils\sizeof.exe ..\bin\texts.bin 49152 "#define SCRIPT_INIT" >> msc-config.h[/code]

Re: MK2 Game - Harbinger (128k)

Publicado: Vie, 21 Ago 2015, 18:55
por Cthonian Godkiller
$this->bbcode_second_pass_quote('elborra', 'S')i hay... la cuestión es que no estoy muy seguro si no lo hacia automáticamente ya. Supongo que no. De todas formas la solución es muy sencilla:

En make.bat, justo despues de la linea compilar el script con msc3.exe tendrás que definir:
$this->bbcode_second_pass_code('', 'echo #define SCRIPT_INIT XXXXX >> msc-config.h')
Para añadirle al fichero msc-config.h (que genera msc3) la posición de memoria del script. Para sacar XXXXX abre librarian.h y mira en que posición está el fichero binario del script. (la dirección obviamente, no la página; la página se tiene que indicar en un #DEFINE que tiene config.h)

Todo esto no hace falta... vuelve a dejarlo comentado
$this->bbcode_second_pass_quote('Cthonian Godkiller', '[')code]
rem If scripts and texts are going to share the same RAM page, use this line
rem (for 128K games)
rem This calculates an offset for the scripts binary automaticly.
rem ..\utils\sizeof.exe ..\bin\texts.bin 49152 "#define SCRIPT_INIT" >> msc-config.h[/code]


una duda, marco y title no tienen que estar en la misma dirección cuando es el mismo fichero ?
$this->bbcode_second_pass_code('', '
// librarian.h
// Generated by The Librarian
// Copyleft 2012 The Mojon Twins

typedef struct {
unsigned char ramPage;
unsigned int ramOffset;
} RESOURCE;

RESOURCE resources [] = {
{3, 49152}, // 0: title.bin
{3, 53248}, // 1: marco.bin
{3, 53248} // 2: ending.bin
};

void get_resource (unsigned char res, unsigned int dest) {
unpack_RAMn (resources [res].ramPage, resources [res].ramOffset, dest);
}

// Defines
#define TITLE_BIN 0
#define MARCO_BIN 1
#define ENDING_BIN 2

')

En el librarian no me aparece el script, solo title,marco y ending , y me ha vuelto a pasar lo mismo del sonido otra vez, y solo he tocado las directivas del script y lo del make, esto es raro de cojones, para arreglarlo he tenido quye copiar los ficheros que colgó nathan en el foro mas arriba otra vez con el player y no se que pasa, no he tocado nada de la musica ,y ya van dos veces que en vez del menu me sale la pantalla de ending :evil: me quiero mataaar !! :twisted:
:( :(

Re: MK2 Game - Harbinger (128k)

Publicado: Vie, 21 Ago 2015, 19:05
por elborra
$this->bbcode_second_pass_quote('Cthonian Godkiller', 'E')n el librarian no aparece el script, solo title,marco y ending , y me ha vuelto a pasar lo mismo del sonido otra vez, y solo he tocado las directivas del script y lo del make, esto es raro de cojones, para arreglarlo he tenido quye copiar los ficheros que colgó nathan en el foro mas arriba otra vez con el player y no se que pasa, no he tocado nada de la musica ,y ya van dos veces que en vez del menu me sale la pantalla de ending :evil: me quiero mataaar !! :twisted:
:( :(
Tendrás que añadirle los ficheros a list.txt del directorio /bin, ¿no? :lol: :lol:
Respecto a lo otro, no sabría decirte, nunca me ha pasado algo parecido como para saber por donde van los tiros.

Re: MK2 Game - Harbinger (128k)

Publicado: Vie, 21 Ago 2015, 19:11
por Cthonian Godkiller
$this->bbcode_second_pass_quote('elborra', '')$this->bbcode_second_pass_quote('Cthonian Godkiller', 'E')n el librarian no aparece el script, solo title,marco y ending , y me ha vuelto a pasar lo mismo del sonido otra vez, y solo he tocado las directivas del script y lo del make, esto es raro de cojones, para arreglarlo he tenido quye copiar los ficheros que colgó nathan en el foro mas arriba otra vez con el player y no se que pasa, no he tocado nada de la musica ,y ya van dos veces que en vez del menu me sale la pantalla de ending :evil: me quiero mataaar !! :twisted:
:( :(
Tendrás que añadirle los ficheros a list.txt del directorio /bin, ¿no? :lol: :lol:
Respecto a lo otro, no sabría decirte, nunca me ha pasado algo parecido como para saber por donde van los tiros.


añado script.bin al list.txt y ahora el ending me sale como menú otra vez y se jode el sonido otra vez :cry:

:tony: copiando los *.bin de /dev a /bin se arregla lo del sonido y lo del marco

ahora ya aparece lo del script en librarian.

$this->bbcode_second_pass_code('', '
// librarian.h
// Generated by The Librarian
// Copyleft 2012 The Mojon Twins

typedef struct {
unsigned char ramPage;
unsigned int ramOffset;
} RESOURCE;

RESOURCE resources [] = {
{3, 49152}, // 0: title.bin
{3, 53248}, // 1: marco.bin
{3, 53248}, // 2: ending.bin
{3, 55424} // 3: script.bin
};

void get_resource (unsigned char res, unsigned int dest) {
unpack_RAMn (resources [res].ramPage, resources [res].ramOffset, dest);
}

// Defines
#define TITLE_BIN 0
#define MARCO_BIN 1
#define ENDING_BIN 2
#define SCRIPT_BIN 3

')

tengo un lio que te cagas, los bins que salen en /bin no son los mismos que estan en /dev ? :loco: :loco: :loco:

Re: MK2 Game - Harbinger (128k)

Publicado: Vie, 21 Ago 2015, 19:30
por Cthonian Godkiller
Tengo que dejar de pensar en modo churrera ... :twisted:

Re: MK2 Game - Harbinger (128k)

Publicado: Vie, 21 Ago 2015, 20:15
por elborra
$this->bbcode_second_pass_quote('Cthonian Godkiller', 'T')engo que dejar de pensar en modo churrera ... :twisted:

En el caso de los scripts si, porque en la churrera los scripts estaban en el binario principal, ahora en MK2 128K va en memoria extra.


EDITO:
Siempre se me olvida el modo 128K sin COMPRESSED_LEVELS, así que he borrado un comentario anterior. De todas formas le he echado un vistazo al source, el problema de la pantalla de ending/inicio es porque en el directorio /bin no tienes correctamente el title.bin, si te fijas tiene 0 Kb (si no encuentra un fichero de la lista.txt se genera automáticamente el fichero pero sin contenido). Mueve title.bin de /dev a /bin y recompila.

Re: MK2 Game - Harbinger (128k)

Publicado: Vie, 21 Ago 2015, 21:09
por Cthonian Godkiller
$this->bbcode_second_pass_quote('elborra', '')$this->bbcode_second_pass_quote('Cthonian Godkiller', 'T')engo que dejar de pensar en modo churrera ... :twisted:

En el caso de los scripts si, porque en la churrera los scripts estaban en el binario principal, ahora en MK2 128K va en memoria extra.

Respecto a los ficheros, en MK2 y 128K casi todo relacionado con recursos va a memoria extra (lo que viene a ser lo que genera librarian) y por eso los ficheros bin a utilizar son los del respectivo directorio. Del directorio dev, quizás el único que se sigue utilizando es el de loading.bin.



si, es mas elegante, aunque supongo que en 48k si metes muchos modulos y haces un supermegascript te las verás putas. :twisted:

Re: MK2 Game - Harbinger (128k)

Publicado: Sab, 22 Ago 2015, 13:06
por 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.

Re: MK2 Game - Harbinger (128k)

Publicado: Sab, 22 Ago 2015, 13:59
por Cthonian Godkiller
$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 :P :P