Proyecto de juego de un inútil (Escape from the sewers)

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
angel
Mensajes: 23212
Registrado: Vie, 09 Ene 2009, 13:04
Ubicación: Torreznolandia
Contactar:

Proyecto de juego de un inútil (Escape from the sewers)

Mensajepor angel » Jue, 21 May 2015, 15:18

:-)
(_\_) (_|_) (_/_) (_|_) ILLO KE HEHEHEHEHEHEEEHEHEHEH!

¡Activa tu rainbow pechónico!
Avatar de Usuario
primy
Mensajes: 78
Registrado: Jue, 26 Mar 2015, 11:41
Contactar:

Re: Proyecto de juego de un inútil (Escape from the sewers)

Mensajepor primy » Jue, 28 May 2015, 17:50

Hace un semana que no aparezco por aquí, pero tranquilos no he desistido todavía en mi empeño de hacer un juego, el problema es que estoy con el scripting y me está costando asimilar todo, :bimba: pero cada vez estoy más flipado con la churrera, es impresionante el trabajo que habéis echo.
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Mensajepor na_th_an » Jue, 28 May 2015, 22:27

El scripting hay que pillarle el rollo. Pregunta cualquier duda. Parece complicado al principio, pero una vez que tu cerebro asimila como funcionan las cosas te salen los scripts solos.
Como diría Rorshach: "Urm..."
Avatar de Usuario
primy
Mensajes: 78
Registrado: Jue, 26 Mar 2015, 11:41
Contactar:

Re: Proyecto de juego de un inútil (Escape from the sewers)

Mensajepor primy » Mar, 02 Jun 2015, 13:56

Pues después de un par de semanas muy liado y dedicándole poco tiempo al juego tengo que deciros que el scripting es complicado pero con paciencia y pensando un poco todo antes de hacer nada creo que puedo más o menos controlarlo, pero me ha surgido una duda, yo pensaba que con el scripting podía hacer las presentaciones que hacéis cuando se inicia un juego, es decir, poner una imagen y presentar un texto a modo de presentación y luego comenzar el juego, pero particularmente no veo como poder hacerlo, si es verdad que con la acción TEXT puedo poner un texto en pantalla (algo que por ahora no se cómo carajo lo hago pero no me sale, pero poco a poco) pero no una imagen y el texto debajo, ya no sé si esta opción solo está contemplada en MK2, o tengo que ser ya un maestro churrero para este menester. :dalefran:
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto de juego de un inútil (Escape from the sewers)

Mensajepor na_th_an » Mar, 02 Jun 2015, 15:16

Eso requiere más maña. No forma parte del motor en sí. Tienes que hacerte (o usar alguno de los que hay, ver más adelante) un motor de cutscenes que puedes poner en extern.h e invocarlo con EXTERN desde el script.

Realmente, si no tienes nociones de programación, puede ser complicado, aunque quizá te ayude:

- Aunque los Leovigildos sean para MK2, el tema de extern funciona exactamente igual así que puedes descargar el paquete de fuentes de Leovigildo, y coger el archivo extern.h que hay en Leovigildo B. Lo colocas en /dev, sustituyendo al que tú tienes. Debería funcionar y, si no, hacerlo funcionar debería ser fácil.

- Create una carpeta /texts en tu proyecto, junto con las que ya hay.

- En /utils de Leovigildo B, verás textstuffer.exe. Copialo a /texts.

- En config.h, tienes que activar el soporte para EXTERN con #define ENABLE_EXTERN_CODE. Con esto conseguirás que se incluya el archivo extern.h que acabas de copiar.

- Ahora hay que crear el texto. El texto se crea en un archivo de texto normal y corriente, que deberá screar en /texts. Por ejemplo, texts/texts.txt. Cada linea de ese archivo de texto es una cadena de texto que podrás usar desde el juego. El número de linea donde está es el número de la cadena de texto. Necesitas un editor de texto con número de linea. Si creas tres lineas de texto, estos serán los textos 1, 2 y 3 en el orden en el que aparecen. Necesitas saber estos números.

- El texto hay que empaquetarlo. Para ello hay que irse a /texts y ejecutar:

Código: Seleccionar todo

textstuffer.exe texts.txt texts.bin 24


Eso de ahí arriba empaqueta los textos usando una anchura de linea de 24 caracteres y graba el resutlado en texts.bin. Las lineas se parten solas respetando las palabras como en un procesador de textos. Además se crea un índice que el programa necesita para ubicar cada texto dentro del binario.

- Copia texts.bin en /dev, ya que extern.h lo necesitará.

- Ahora viene un parte un tanto peliaguda: las imagenes. Las imagenes ocupan muchísimo. En un juego de 48K es posible que no te quepa demasiado. Leovigildo es MK2, que ocupa menos memoria, y por eso pudimos usar algunas, no sin problemas. Necesitas el archivo png2scr.exe que encontrarás en /utils de Leovigildo B. Copialo, por ejemplo, al directorio /gfx de tu proyecto.

Ahora debes crear las imagenes y grabarlas como png. Tienes que tener en cuenta una cosa: la memoria gráfica del Spectrum está organizada en 3 tercios, más los atributos. Obviamente, una imagen que sólo ocupe 1, 2 o 3 tercios ocupará menos que una imagen completa con atributos, pero no podrá tener color. En Leovigildo sólo pudimos usar imagenes de 1 o 2 tercios, sin color. Cada tercio ocupa 8 caracteres de alto. Si tu imagen entra en las 8 primeras lineas de caracteres, puedes usar 1 tercio. Si es más alta, necesitarás 2. Si quieres colores, necesitarás la imagen completa.

Para convertir las imagenes usa png2scr.exe:

Código: Seleccionar todo

png2scr.exe imagen.png imagen.scr tercios


Donde "tercios" es 1, 2 o 3. Si no lo pones, la conversión será de la imagen completa incluyendo los atributos.

Tienes que convertir todas tus imagenes usando el minimo número de tercios posible - aunque si tienen color no es posible y hay que convertir la imagen completa.

- Una vez convertidas todas las imagenes, tienes que comprimirlas con apack. Ahora no recuerdo por donde anda en la Churrera ¿en utils? ¿gfx? Búscalo.

Código: Seleccionar todo

apack.exe imagen.scr imagen.bin


Cuando tengas todas comprimidas, ponlas en /dev.

- Ahora tienes que editar extern.h. Extern.h tal y como lo tienes, que es el correspondiente a Leovigildo B, admite hasta un máximo de cuatro imagenes para cutscenes. Busca este trozo de código:

Código: Seleccionar todo

// Leovigildo B needs 2 compressed images for the endings...

extern const unsigned char im1 [0], im2 [0], imintro [0];
const unsigned char *ims [] = {
   im1, im2
};

#asm
   ._im1
      BINARY "f1.bin"
   ._im2
      BINARY "f2.bin"
   ._imintro
      BINARY "fintro.bin"      
#endasm


Eso lo tienes que adaptar. En primer lugar necesitas una referencia para cada imagen que uses. Imagina que has comprimido 4 imagenes (que no creo que te quepan ni de coña):

Código: Seleccionar todo

extern const unsigned char im1 [0], im2 [0], im3 [0], im4 [0];


Ahora tienes que hacer una lista con esas cuatro imagenes:

Código: Seleccionar todo

const unsigned char *ims [] = {
   im1, im2, im3, im4
};


Y por último hay que incluir esas cuatro imagenes comprimidas en el binario:

Código: Seleccionar todo

#asm
   ._im1
      BINARY "f1.bin"
   ._im2
      BINARY "f2.bin"
   ._im3
      BINARY "f3.bin"
   ._im4
      BINARY "f4.bin"
#endasm


(He usado un ejemplo con el máximo número de imagenes posible porque si usas menos no tienes más que quitar de ahí). Al final te queda todo así, en lugar del cacho original que puse antes:

Código: Seleccionar todo

extern const unsigned char im1 [0], im2 [0], im3 [0], im4 [0];
const unsigned char *ims [] = {
   im1, im2, im3, im4
};

#asm
   ._im1
      BINARY "f1.bin"
   ._im2
      BINARY "f2.bin"
   ._im3
      BINARY "f3.bin"
   ._im4
      BINARY "f4.bin"
#endasm


- Ahora ya está listo para usar. ¿Cómo? Pues desde el script, con EXTERN. EXTERN recibe un número. Dependiendo del número, nuestro código hace varias cosas:

EXTERN 0 borra la pantalla de juego de una forma chula.
EXTERN 1-249 pone la linea "N" de texts.txt, sirve para imprimir los textos.
EXTERN 250 desactiva el modo cutscene (*)
EXTERN 251 activa el modo cutscene (*)
EXTERN 252, 253, 254 y 255 pone las imagenes 1, 2, 3 y 4, respectivamente.

Normalmente, no estamos en modo cutscene. Cuando haces EXTERN N para poner la linea N de texto saldrá en un recuadro como en Ninjajar.

Si activamos el modo cutscene con EXTERN 251, cuando hagas un EXTERN N para poner la linea N de texto saldrá en plan cutscene, como el final de Ninjajar o la intro de Goku Mal o Leovigildo, que es lo que quieres.

Por tanto, para poner una especie de intro al principio de tu juego, puedes poner todas estas llamadas al principio de tu ENTERING GAME, algo así:

Código: Seleccionar todo

[code]ENTERING GAME
    IF TRUE
    THEN
        EXTERN 0    # Borra la pantalla
        EXTERN 251  # Modo cutscene ON
        EXTERN 1    # Ponemos la primera linea de texto
        EXTERN 2    #
        EXTERN 3    # ... y dos más.
        EXTERN 252  # Ahora ponemos la imagen im1
        EXTERN 4
        EXTERN 5    # Dos lineas más de texto.
        EXTERN 253  # Ahora la imagen im2
        EXTERN 6
        EXTERN 7
        EXTERN 8
        EXTERN 9    # más texto.
        EXTERN 0    # Borramos y fin.
       
        ... (más cosas que necesites)
    END
END


Parece complicado, pero en realidad es laborioso. Los extern.h que incluimos en todos los juegos a partir de Ninjajar (incluido la demo Espadewr) son muy parecidos, sólo tienen pequeñas adaptaciones, y vienen muy bien para videoaventuras y sacar texto. Como digo, lo más probable es que funcionen del tirón con la Churrera, aunque no lo he probado y no lo puedo asegurar - en el caso de que no funcionen, seguro que es por una tontería fácilmente solucionable.
Como diría Rorshach: "Urm..."
Avatar de Usuario
primy
Mensajes: 78
Registrado: Jue, 26 Mar 2015, 11:41
Contactar:

Re: Proyecto de juego de un inútil (Escape from the sewers)

Mensajepor primy » Mar, 02 Jun 2015, 16:55

Pufff muy laborioso sí señor, pero creo que me voy a pringar hasta la medula con esto, porque me parece mentira pero casi lo e entendido todo (estoy flipando con migo mismo :o ), así que si entiendo lo que hay que hacer creo que puedo con esto. De verdad os agradezco una vez más toda la ayuda (que espero que sea la última vez que os de la plasta) y por supuesto la paciencia que estáis teniendo con migo :adore: :adore: voy a terminar de decorar algunas partes del escenario con el scripting y me voy a liar con esto, mil millones de gracias.
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto de juego de un inútil (Escape from the sewers)

Mensajepor na_th_an » Mié, 03 Jun 2015, 08:10

Antes de empezar tienes que ver cuánto te va ocupando el binario, porque trabajar de balde es una caca.

Siempre se puede ganar mucha memoria pasándote a 128K (hay una guía paso por paso para pasar un juego que empezó siendo para 48K a 128K por ahí)... Todas las imagenes pueden ir en la memoria extra, al igual que la música. Pero entonces tendrás que buscarte un músico :)

Para ver cuanto ocupa, lo más fácil es mirar el .bin que se genera al compilar tu juego, o cargar el .tap en spectaculator y ver cuando ocupa el último bloque de la cinta en el tape browser.

Si pasas de 35000 es mejor no planteártelo. Las imagenes ocupan mucho y el propio extern.h necesario es complejo y también se lleva muchos bytes.

Pero como te digo, una vez que el juego está terminado, pasarlo a 128K para meterle todos estos adornos es coser y cantar. Incluso verás como se libera la suficiente memoria para ampliar el mapa, por ejemplo (la pantalla de título y la del final también se van para RAM extra, la música beeper desaparece, el código que genera los efectos de sonido también).
Como diría Rorshach: "Urm..."
Avatar de Usuario
primy
Mensajes: 78
Registrado: Jue, 26 Mar 2015, 11:41
Contactar:

Re: Proyecto de juego de un inútil (Escape from the sewers)

Mensajepor primy » Mié, 03 Jun 2015, 12:38

:( :( es verdad no había caído en la cuenta del espacio :cabesa: bueno primero tengo que resolver los problemas que estoy teniendo con el scripting, y es que al compilar me da estos errores:

c:\Users\mvergara\Downloads\spectrum\YTUJ\dev>make.bat
** WARNING **
MapCnv convierte un archivo raw de mappy (mapa.map, por ejemplo)
a un array directamente usable por los juegos de la churrera.
Si metes mal los parßmetros ocurrirßn cosas divertidas.

packed
Se escribi¾ mapa.h con 30 pantallas empaquetadas (2250 bytes).
Se encontraron 3 cerrojos.

1 archivo(s) copiado(s).
1 archivo(s) copiado(s).
1 archivo(s) copiado(s).
cpp: line 23, Fatal error: Cannot open include file "msc-config.h"
#include "msc-config.h"

BAS2TAP v2.5 by Martijn van der Heide of ThunderWare Research Center

Creating output file loader.tap
Done! Listing contains 1 line.
Input file open failed!
loader.tap
screen.tap
1 archivo(s) copiado(s).
No se pudo encontrar c:\Users\mvergara\Downloads\spectrum\YTUJ\dev\main.tap
No se pudo encontrar c:\Users\mvergara\Downloads\spectrum\YTUJ\dev\YTUJ.bin
DONE

c:\Users\mvergara\Downloads\spectrum\YTUJ\dev>

Creo que el archivo YTUJ.spt esta bien echo, o yo no sé detectar el problema.

# Título tonto
# Copyleft 201X tu grupo roneón soft.
# Churrera 3.1

# flags:
# 1 -

ENTERING GAME
IF TRUE
THEN
# Primera pantalla
ENTERING SCREEN 0
# Decoración
IF TRUE
THEN
# Letrero Exit
SET TILE (8, 6) = 20
# Esqueleto
SET TILE (3, 7) = 22
SET TILE (4, 7) = 23
SET TILE (3, 8) = 38
SET TILE (4, 8) = 39
END
END

También he revisado el archivo make por si hubiera metido la zarpa, pero tampoco veo nada raro.

@echo off
rem cd ..\script
rem msc YTUJ.spt msc.h 30
rem copy *.h ..\dev
rem cd ..\dev
cd ..\map
..\utils\mapcnv mapa.map 10 3 15 10 15 packed
copy mapa.h ..\dev
cd ..\dev
zcc +zx -vn YTUJ.c -o YTUJ.bin -lndos -lsplib2 -zorg=25000
..\utils\bas2tap -a10 -sYTUJ loader.bas loader.tap
..\utils\bin2tap -o screen.tap -a 16384 loading.bin
..\utils\bin2tap -o main.tap -a 25000 YTUJ.bin
copy /b loader.tap + screen.tap + main.tap YTUJ.tap
del loader.tap
del screen.tap
del main.tap
del YTUJ.bin
echo DONE


¿Dónde puedo haber metido la pata? ¿He olvidado copiar algún archivo a /dev?
Avatar de Usuario
angel
Mensajes: 23212
Registrado: Vie, 09 Ene 2009, 13:04
Ubicación: Torreznolandia
Contactar:

Re: Proyecto de juego de un inútil (Escape from the sewers)

Mensajepor angel » Mié, 03 Jun 2015, 12:40

Veo esto:

Código: Seleccionar todo

cpp: line 23, Fatal error: Cannot open include file "msc-config.h"
#include "msc-config.h"


No se cómo va, porque no he visto tus archivos, pero mira no tengas en algún sitio el include comentado.
(_\_) (_|_) (_/_) (_|_) ILLO KE HEHEHEHEHEHEEEHEHEHEH!

¡Activa tu rainbow pechónico!
Avatar de Usuario
primy
Mensajes: 78
Registrado: Jue, 26 Mar 2015, 11:41
Contactar:

Re: Proyecto de juego de un inútil (Escape from the sewers)

Mensajepor primy » Mié, 03 Jun 2015, 12:55

:shock: ¿donde puedo encontrar el "include" ese?

Volver a “La Churrera”

¿Quién está conectado?

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