Página 1 de 2

Modo 128K

Publicado: Mié, 14 Oct 2015, 12:02
por karkayu
Buenas!!!

Tengo el juego acabado para 48K pero como aún me gustaría meterle un par de cosillas y tengo tiempo hasta el final de la ZXDEV, me he animado a pasarlo a 128K. Sin embargo me sale un error en la compilación y no sé solucionarlo.

Os cuento:
- Ahora mismo el juego sólo tiene una fase. Preparo el level1.bin correctamente con buildlevel y posteriormente lo comprimo con apack obteniendo el level1c.bin
- En la carpeta BIN he colocado los archivos title.bin, marco.bin (0 bytes), ending.bin y level1c.bin. El librarian me crea correctamente RAM3.BIN y librarian.h
- Modifico el archivo levels128.h con:

$this->bbcode_second_pass_code('', '// Level struct
LEVEL levels [MAX_LEVELS] = {
{3,2}
};
')

- Por ahora uso las musicas que vienen en la carpeta mus, así que no necesito editar el WYZproPlay47aZX.asm

- Como uso la version 3.99.3d de la churrera, en churromain.c comento la parte de reserva de memoria dedicada a 48K y descomento la de 128k:

$this->bbcode_second_pass_code('', '// Versión para 128K
#pragma output STACKPTR=24199
#define FREEPOOL 61697
#define AD_FREE 61440 - NUMBLOCKS * 15')

- He modificado el loader.bas con el codigo correspondiente que indica na_th_an en esta entrada: https://www.mojontwins.com/mojoniaplus/viewtopic.php?p=49060#p49060

- Por supuesto, activo las directivas correspondientes en el config.h
$this->bbcode_second_pass_code('', '
#define MODE_128K // Experimental!
#define COMPRESSED_LEVELS // use levels.h instead of mapa.h and enems.h (!)
#define MAX_LEVELS 1 // # of compressed levels
')

- Como solo tengo una fase y con los pasos anteriores no he tenido problemas, he modificado el make.bat que había en la carpeta spare y ha quedado casi igual que el que usasteis para las nuevas aventuras de dogmole.

$this->bbcode_second_pass_code('', '
@echo off
echo ### COMPILANDO SCRIPT ###
cd ..\script
msc pnoid.spt msc.h 30
copy *.h ..\dev
cd ..\dev
echo -------------------------------------------------------------------------------
echo ### GENERANDO BINARIOS ###
echo * Building reubica
..\utils\pasmo reubica.asm reubica.bin


echo * Building RAM3 AND RAM4 AND RAM6
cd ..\bin
librarian.exe
copy RAM3.bin ..\dev\ram3.bin
copy librarian.h ..\dev


echo -------------------------------------------------------------------------------
echo ### COMPILANDO WYZ PLAYER ###
cd ..\mus
..\utils\pasmo WYZproPlay47aZX.ASM ram1.bin
copy ram1.bin ..\dev
cd ..\dev
echo -------------------------------------------------------------------------------
echo ### COMPILANDO GUEGO ###
rem zcc +zx -vn pnoid.c -o pnoid.bin -lndos -lsplib2 -zorg=24200
zcc +zx -vn pnoid.c -o pnoid.bin -lsplib2 -zorg=24200

echo -------------------------------------------------------------------------------
echo ### CONSTRUYENDO CINTA ###
..\utils\bas2tap -a10 -sLOADER loader.bas loader.tap
..\utils\bin2tap -o reubica.tap -a 25000 reubica.bin
..\utils\bin2tap -o ram1.tap -a 32768 ram1.bin
..\utils\bin2tap -o ram3.tap -a 32768 ram3.bin
..\utils\bin2tap -o screen.tap -a 16384 loading.bin
..\utils\bin2tap -o main.tap -a 24200 pnoid.bin
copy /b loader.tap + screen.tap + reubica.tap + ram1.tap + ram3.tap + main.tap pnoid.tap
echo -------------------------------------------------------------------------------
echo ### LIMPIANDO ###
del loader.tap
del screen.tap
del main.tap
del reubica.tap
del ram1.bin
del ram3.bin
del ram1.tap
del ram3.tap
del pnoid.bin
del zcc_opt.def
echo -------------------------------------------------------------------------------
echo ### DONE ###
')


Al ejecutar el make,bat, me aparece el siguiente error al compilar el juego (es decir, todo lo anterior me lo hace correctamente):

$this->bbcode_second_pass_code('', '
### COMPILANDO GUEGO ###
1 archivo(s) copiado(s).
1 archivo(s) copiado(s).
sccz80: "engine.h" L:1416 Error: #42;Unknow symbol: n_bolts
')

La línea de 'engine.h' correspondiente al error es:

$this->bbcode_second_pass_code('', '
#ifdef COMPRESSED_LEVELS
for (gpit = 0; gpit <n_bolts; gpit ++) {
#else
for (gpit = 0; gpit < MAX_CERROJOS; gpit ++) {
#endif
')

Aún con este error, se crea el .tap y al ejecutarlo en el emu, carga la pantalla de loading y ahí se queda.

¿Alguna idea?

Gracias :D

Re: Modo 128K

Publicado: Mié, 14 Oct 2015, 13:09
por na_th_an
Parece un error, nunca nadie había hecho juegos multi-nivel con la Churrera que usasen llaves. Lo miraré y te comento.

Re: Modo 128K

Publicado: Mié, 14 Oct 2015, 13:47
por karkayu
$this->bbcode_second_pass_quote('na_th_an', 'P')arece un error, nunca nadie había hecho juegos multi-nivel con la Churrera que usasen llaves. Lo miraré y te comento.


Thanks

Re: Modo 128K

Publicado: Mié, 14 Oct 2015, 18:02
por na_th_an
Seguramente todo pase por definir la variable y darle un valor en prepare_level.

Mañana por la mañana le doy fran.

Re: Modo 128K

Publicado: Lun, 19 Oct 2015, 12:40
por karkayu
Hola!!

¿Has podido mirar el fallo?

EDITO: Me da palo preguntar porque sé que estas liado :oops:

Re: Modo 128K

Publicado: Lun, 19 Oct 2015, 13:20
por na_th_an
No lo puedo probar, pero como en levels128.h se define MAX_CERROJOS (es un valor fijo a 32), creo que se arreglaría haciendo esto:

$this->bbcode_second_pass_code('', '#ifndef DEACTIVATE_KEYS
// Open locks
#if defined (COMPRESSED_LEVELS) && !defined (MODE_128K)
for (gpit = 0; gpit < n_bolts; gpit ++) {
#else
for (gpit = 0; gpit < MAX_CERROJOS; gpit ++) {
#endif
if (cerrojos [gpit].np == n_pant && !cerrojos [gpit].st) {
gpx = cerrojos [gpit].x;
gpy = cerrojos [gpit].y;
draw_coloured_tile (VIEWPORT_X + gpx + gpx, VIEWPORT_Y + gpy + gpy, 0);
gpd = 15 * gpy + gpx;
map_attr [gpd] = 0;
map_buff [gpd] = 0;
}
}
#endif
}')

He cambiado la tercera linea de ese bloque (1415) para que sólo se cumpla para COMPRESSED_LEVELS pero sin MODE_128K. Pruébalo y me cuentas :)

Re: Modo 128K

Publicado: Lun, 19 Oct 2015, 17:18
por karkayu
Eso va en engine.h, verdad?

Re: Modo 128K

Publicado: Lun, 19 Oct 2015, 17:21
por na_th_an
Sí, es donde te da el error de compilación.

Re: Modo 128K

Publicado: Lun, 19 Oct 2015, 17:23
por karkayu
$this->bbcode_second_pass_quote('na_th_an', 'S')í, es donde te da el error de compilación.


Ya lo he visto, si.


Cambio y te digo ;)

EDITO:
Ya no aparece el error anterior, pero aparecen otros errores:

$this->bbcode_second_pass_code('', 'Error at file 'C:\Users\karkayu\AppData\Local\Temp\s1ls_.asm' module 'PNOID': Sy
mbol not defined in expression '_PETA_EL_BEEPER'
1 errors occurred during assembly
Key to filenames:
C:\Users\karkayu\AppData\Local\Temp\s1ls_.o = pnoid.c
Error at file 'C:\Users\karkayu\AppData\Local\Temp\s1ls_.asm' module 'PNOID': Sy
mbol not defined in expression '_PETA_EL_BEEPER'')

Re: Modo 128K

Publicado: Mar, 20 Oct 2015, 08:28
por na_th_an
Seguramente se habrán colado un par de llamadas sin proteger, muy probablemente en extern.h (ahora no recuerdo si lo estabas usando para mostrar textos - en esa caso seguro que es ahí).

Busca las lineas del estilo:

$this->bbcode_second_pass_code('', 'peta_el_beeper (6);')

Y haz la adaptación a 128K así:

$this->bbcode_second_pass_code('', '#ifdef MODE_128K
wyz_play_sound (n);
#else
peta_el_beeper (n);
#endif')

Donde "n" es el número que sale en "peta_el_beeper" - aunque probablemente luego lo tengas que modificar para buscar un sonido que te guste más.

Yo juraría que son los del extern.h, pero es probable que se me haya colado por algún otro sitio. En este caso, la solución es la misma, pero tendrás que buscar :) Lamentablemente el error es a nivel de linker y ese no te dice ya el archivo :-(