Modo 128K

For all things Churrera. ¿Estás haciendo un juego? ¿quieres proponer un cambio? ¿tienes alguna duda? ¡Cuéntanoslo!

Moderador: na_th_an

Avatar de Usuario
karkayu
Mensajes: 40
Registrado: Lun, 07 Sep 2015, 14:34

Modo 128K

Mensajepor karkayu » Mié, 14 Oct 2015, 12:02

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:

Código: Seleccionar todo

// 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:

Código: Seleccionar todo

// 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: http://www.mojontwins.com/mojoniaplus/viewtopic.php?p=49060#p49060

- Por supuesto, activo las directivas correspondientes en el config.h

Código: Seleccionar todo

#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.

Código: Seleccionar todo

@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):

Código: Seleccionar todo

### 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:

Código: Seleccionar todo

#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
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Modo 128K

Mensajepor na_th_an » Mié, 14 Oct 2015, 13:09

Parece un error, nunca nadie había hecho juegos multi-nivel con la Churrera que usasen llaves. Lo miraré y te comento.
Como diría Rorshach: "Urm..."
Avatar de Usuario
karkayu
Mensajes: 40
Registrado: Lun, 07 Sep 2015, 14:34

Re: Modo 128K

Mensajepor karkayu » Mié, 14 Oct 2015, 13:47

na_th_an escribió:Parece un error, nunca nadie había hecho juegos multi-nivel con la Churrera que usasen llaves. Lo miraré y te comento.


Thanks
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Modo 128K

Mensajepor na_th_an » Mié, 14 Oct 2015, 18:02

Seguramente todo pase por definir la variable y darle un valor en prepare_level.

Mañana por la mañana le doy fran.
Como diría Rorshach: "Urm..."
Avatar de Usuario
karkayu
Mensajes: 40
Registrado: Lun, 07 Sep 2015, 14:34

Re: Modo 128K

Mensajepor karkayu » Lun, 19 Oct 2015, 12:40

Hola!!

¿Has podido mirar el fallo?

EDITO: Me da palo preguntar porque sé que estas liado :oops:
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Modo 128K

Mensajepor na_th_an » Lun, 19 Oct 2015, 13:20

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:

Código: Seleccionar todo

#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 :)
Como diría Rorshach: "Urm..."
Avatar de Usuario
karkayu
Mensajes: 40
Registrado: Lun, 07 Sep 2015, 14:34

Re: Modo 128K

Mensajepor karkayu » Lun, 19 Oct 2015, 17:18

Eso va en engine.h, verdad?
Última edición por karkayu el Lun, 19 Oct 2015, 17:23, editado 2 veces en total.
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Modo 128K

Mensajepor na_th_an » Lun, 19 Oct 2015, 17:21

Sí, es donde te da el error de compilación.
Como diría Rorshach: "Urm..."
Avatar de Usuario
karkayu
Mensajes: 40
Registrado: Lun, 07 Sep 2015, 14:34

Re: Modo 128K

Mensajepor karkayu » Lun, 19 Oct 2015, 17:23

na_th_an escribió: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:

Código: Seleccionar todo

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'
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Modo 128K

Mensajepor na_th_an » Mar, 20 Oct 2015, 08:28

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:

Código: Seleccionar todo

peta_el_beeper (6);


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

Código: Seleccionar todo

#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 :-(
Como diría Rorshach: "Urm..."

Volver a “La Churrera”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados