Página 6 de 15

Re: Proyecto Aquanoids: el videojuego

Publicado: Sab, 08 Ago 2015, 22:24
por NeilParsons
Aún no había aplicado el script al código del juego, por lo que el fallo en esa pantalla no tiene que ver con ello. Pero gracias por el apunte.

Re: Proyecto Aquanoids: el videojuego

Publicado: Dom, 09 Ago 2015, 02:47
por elborra
$this->bbcode_second_pass_quote('NeilParsons', 'A')ún no había aplicado el script al código del juego, por lo que el fallo en esa pantalla no tiene que ver con ello. Pero gracias por el apunte.


Pues entonces tiene que ser el mapa 100%, comprueba por enesima vez que realmente el tile donde te salgan los tiles mal (la roca y el tipo plataforma) es el tile del fondo (chequealo mirando el número de bloque que usa....)

PD: Para lo que iba a tardar, he querido comprobarlo antes XD, efectivamente los bloques que te salen mal son porque no está puesto como tile de fondo 0 (que es el que quieres), sino como 19 (pero como es negro dicho tile, no se nota).

Debido a los cambios que has ido haciendo al reducir el numero de tiles para poner mapas packed el fichero contenedor del mapa, el fmp, tiene actualmente 31 tiles y no 16, a pesar de que todos a partir del 16 sean negro. Esto último no se si realmente afecta a la hora de crear el fichero mapa.h con la utilidad correspondiente, pero por si acaso te lo comento. Esto es un "problema" de mappy al reducir el numero de bloques importando un nuevo set con menos tiles que el anterior, que a pesar de dejarlos en negro no los elimina.

Re: Proyecto Aquanoids: el videojuego

Publicado: Dom, 09 Ago 2015, 12:11
por NeilParsons
Luego esta tarde y siguientes dias me dedicaré a repasar nuevamente los archivos del mapa, el del scripting y una cosa que tengo que conseguir todavía, y alguien me lo ha advertido, es que la sensación de que el personaje se mueve dentro del agua sigue sin ser del todo creible. ¿Sugerencias para la dinámica del personaje, en cuanto a la gravedad, inercia y desplazamiento en hor y vrt?

Proyecto Aquanoids: el videojuego

Publicado: Dom, 09 Ago 2015, 12:31
por angel
El problema es que es un robot, hacer que parezca agua con un personaje que bucee como en subacuatic y ninjajar es algo más eficaz.

Puedes plantearte algo como el motor de jet paco, que no salte :-) o un salto muy lento.

Re: Proyecto Aquanoids: el videojuego

Publicado: Dom, 09 Ago 2015, 21:47
por NeilParsons
Probablemente, me haya acercado un poco más a lo que tendría que ser el movimiento del robot en el agua (que se mueva algo más lento pero no demasiado, que haya inercia en el movimiento horizontal cuando deje de desplazarse y que la gravedad sea la menor posible) pero probarlo y decirme qué tal. De paso, ya se ha corregido lo de la pantalla 24 y he modificado ligeramente algunos sprites, así como la pantalla de título y el marco.

Todavía no me he decidido a meter el scripting, hasta darle un repaso a fondo al tema. Por otro lado, había probado el cambio de activar la directiva del jetpack en lugar del salto, en config.h; pero me he dado cuenta de que si lo dejara así, haría el juego demasiado fácil, así que lo dejo como estaba antes.

Aquanoids-v1.3-src.rar
(643.55 KiB) Descargado 285 veces

Re: Proyecto Aquanoids: el videojuego

Publicado: Lun, 10 Ago 2015, 10:34
por na_th_an
$this->bbcode_second_pass_quote('elborra', '')$this->bbcode_second_pass_quote('NeilParsons', 'A')ún no había aplicado el script al código del juego, por lo que el fallo en esa pantalla no tiene que ver con ello. Pero gracias por el apunte.


Pues entonces tiene que ser el mapa 100%, comprueba por enesima vez que realmente el tile donde te salgan los tiles mal (la roca y el tipo plataforma) es el tile del fondo (chequealo mirando el número de bloque que usa....)

PD: Para lo que iba a tardar, he querido comprobarlo antes XD, efectivamente los bloques que te salen mal son porque no está puesto como tile de fondo 0 (que es el que quieres), sino como 19 (pero como es negro dicho tile, no se nota).

Debido a los cambios que has ido haciendo al reducir el numero de tiles para poner mapas packed el fichero contenedor del mapa, el fmp, tiene actualmente 31 tiles y no 16, a pesar de que todos a partir del 16 sean negro. Esto último no se si realmente afecta a la hora de crear el fichero mapa.h con la utilidad correspondiente, pero por si acaso te lo comento. Esto es un "problema" de mappy al reducir el numero de bloques importando un nuevo set con menos tiles que el anterior, que a pesar de dejarlos en negro no los elimina.


Aunque ya está resuelto (lamento no poder estar más al quite durante los fines de semana, pero es que el churumbel está a tope de power), aclaro las cosas.

En efecto el problema tiene que ver con lo que comenta elborra. Hay que fijarse muy bien en lo que va a consumir mapcnv porque es bastante tontaco. Si le dices que es packed, entonces asume packed, o sea, que sólo se va a encontrar valores de 0 a 15.

mapcnv, en modo packed, coge 4 bits de cada tile del mapa y los junta de 2 en 2 en un byte. Y cuando digo "coge 4 bits" se refiere a eso: coge los 4 bits menos significativos del valor que sale en el archivo .map. Si el valor es de 0 a 15, cogiendo 4 bits obtiene un número correcto (porque 4 bits representan valores de 0 a 15). Si el valor es mayor que 15, pues cogerá los 4 bits menos significativos y el número resultante se parecerá poco al original.

Por ejemplo, si encuentra un 19, en binario 00010011, al coger los 4 bits menos significativos se queda con 0011, que es 3. O sea, un tile 19 se convierte en un tile 3.

Hay que tener cuidado con estas cosas :)

En la versión actual de MK2 el caso hubiese sido aún más sangrante :D el conversor es más inteligente y hace más cosas. Al encontrar el 19 y haberle forzado a "packed" hubiese cogido ese tile y lo hubiese añadido automáticamente al script como decoración de esa pantalla :lol:

Re: Proyecto Aquanoids: el videojuego

Publicado: Mar, 11 Ago 2015, 15:04
por NeilParsons
Dudas de última hora. He modificado el archivo make.bat para que pueda por fin incluir en la compilación las cláusulas del scripting del juego (las que creo pueden funcionar en el juego), pero al general el alchivo con el juego y empezal a plobal.lo para vel si todo iba bien, :loco: resulta que no veo cambio significativo alguno. Todo lo veo igual que como estaba en las últimas betas lanzadas. ¿Está todo bien, o hay algo que me falta aquí? :cabesa:

$this->bbcode_second_pass_code('', '@echo off
cd ..\script
msc aquanoid.spt msc.h 32
copy *.h ..\dev
cd ..\dev
cd ..\map
..\utils\mapcnv mapa.map 8 4 15 10 15 packed
copy mapa.h ..\dev
cd ..\dev
zcc +zx -vn aquanoid.c -o aquanoid.bin -lndos -lsplib2 -zorg=25000
..\utils\bas2tap -a10 -sAQUANOIDS loader.bas loader.tap
..\utils\bin2tap -o screen.tap -a 16384 loading.bin
..\utils\bin2tap -o main.tap -a 25000 aquanoid.bin
copy /b loader.tap + screen.tap + main.tap aquanoid.tap
del loader.tap
del screen.tap
del main.tap
del aquanoid.bin
echo DONE')

Así he dejado el contenido del archivo aquanoid.spt, después de darle vueltas al tema. Otra cosa, si voy a coger durante el juego 15 objetos que, en definitiva, va a estar predeterminado por la directiva #define PLAYER_NUM_OBJETOS en config.h, no tengo por qué definir un flag (SET FLAG 1, 1) para ellos. Ya me diréis qué tengo que cambiar o modificar aquí para ir empezando a ver resultados:

$this->bbcode_second_pass_code('', '# Aquanoids
# Copyleft 2015 Neil Parsons
# Churrera 3.99b

# flags:
# 1 = cuenta de baterías (hasta 15)
# 2 = cuenta de objeto 1
# 3 = cuenta de objeto 2
# 4 = cuenta de objeto 3
# 5 = control objetos

# SET FLAG 1, 1 - ¿Innecesario?
SET FLAG 2, 0
SET FLAG 3, 0
SET FLAG 4, 0
SET FLAG 5, 0

ENTERING SCREEN 0
# Superficie, ordenadores, lámparas, contenedor.
IF TRUE
THEN
SET TILE (0, 0) = 20
SET TILE (1, 0) = 20
SET TILE (2, 0) = 20
SET TILE (3, 0) = 20
SET TILE (4, 0) = 20
SET TILE (5, 0) = 20
SET TILE (6, 0) = 20
SET TILE (7, 0) = 20
SET TILE (8, 0) = 20
SET TILE (9, 0) = 20
SET TILE (10, 0) = 20
SET TILE (11, 0) = 20
SET TILE (12, 0) = 20
SET TILE (13, 0) = 20
SET TILE (14, 0) = 20
# Lámparas
SET TILE (2, 4) = 22
SET TILE (3, 4) = 23
SET TILE (5, 4) = 22
SET TILE (6, 4) = 23
# Contenedor
SET TILE (2, 7) = 25
SET TILE (2, 8) = 26
SET TILE (3, 7) = 27
SET TILE (3, 8) = 28
# Vigas
SET TILE (6, 5) = 21
SET TILE (7, 5) = 21
SET TILE (8, 5) = 21
# Ordenadores
SET TILE (1, 8) = 24
SET TILE (5, 8) = 24
SET TILE (6, 8) = 24
# Fire zone (x1, y1, x2, y2)
SET_FIRE_ZONE 17, 111, 49, 143
END
END

ENTERING SCREEN 1
# Superficie
IF TRUE
THEN
SET TILE (0, 0) = 20
SET TILE (1, 0) = 20
SET TILE (2, 0) = 20
SET TILE (3, 0) = 20
SET TILE (4, 0) = 20
SET TILE (5, 0) = 20
SET TILE (6, 0) = 20
SET TILE (7, 0) = 20
SET TILE (8, 0) = 20
SET TILE (9, 0) = 20
SET TILE (10, 0) = 20
SET TILE (11, 0) = 20
SET TILE (12, 0) = 20
SET TILE (13, 0) = 20
SET TILE (14, 0) = 20
END
END

ENTERING SCREEN 2
# Superficie
IF TRUE
THEN
SET TILE (0, 0) = 20
SET TILE (1, 0) = 20
SET TILE (2, 0) = 20
SET TILE (3, 0) = 20
SET TILE (4, 0) = 20
SET TILE (5, 0) = 20
SET TILE (6, 0) = 20
SET TILE (7, 0) = 20
SET TILE (8, 0) = 20
SET TILE (9, 0) = 20
SET TILE (10, 0) = 20
SET TILE (11, 0) = 20
SET TILE (12, 0) = 20
SET TILE (13, 0) = 20
SET TILE (14, 0) = 20
END
END

ENTERING SCREEN 3
# Superficie
IF TRUE
THEN
SET TILE (0, 0) = 20
SET TILE (1, 0) = 20
SET TILE (2, 0) = 20
SET TILE (3, 0) = 20
SET TILE (4, 0) = 20
SET TILE (5, 0) = 20
SET TILE (6, 0) = 20
SET TILE (7, 0) = 20
SET TILE (8, 0) = 20
SET TILE (9, 0) = 20
SET TILE (10, 0) = 20
SET TILE (11, 0) = 20
SET TILE (12, 0) = 20
SET TILE (13, 0) = 20
SET TILE (14, 0) = 20
END
END

ENTERING SCREEN 4
# Superficie
IF TRUE
THEN
SET TILE (0, 0) = 20
SET TILE (1, 0) = 20
SET TILE (2, 0) = 20
SET TILE (3, 0) = 20
SET TILE (4, 0) = 20
SET TILE (5, 0) = 20
SET TILE (6, 0) = 20
SET TILE (7, 0) = 20
SET TILE (8, 0) = 20
SET TILE (9, 0) = 20
SET TILE (10, 0) = 20
SET TILE (11, 0) = 20
SET TILE (12, 0) = 20
SET TILE (13, 0) = 20
SET TILE (14, 0) = 20
END
END

ENTERING SCREEN 5
# Superficie
IF TRUE
THEN
SET TILE (0, 0) = 20
SET TILE (1, 0) = 20
SET TILE (2, 0) = 20
SET TILE (3, 0) = 20
SET TILE (4, 0) = 20
SET TILE (5, 0) = 20
SET TILE (7, 0) = 20
SET TILE (8, 0) = 20
SET TILE (9, 0) = 20
SET TILE (10, 0) = 20
SET TILE (11, 0) = 20
SET TILE (12, 0) = 20
SET TILE (13, 0) = 20
SET TILE (14, 0) = 20
END
END

ENTERING SCREEN 6
# Superficie
IF TRUE
THEN
SET TILE (0, 0) = 20
SET TILE (1, 0) = 20
SET TILE (2, 0) = 20
SET TILE (3, 0) = 20
SET TILE (4, 0) = 20
SET TILE (5, 0) = 20
SET TILE (6, 0) = 20
SET TILE (7, 0) = 20
SET TILE (8, 0) = 20
SET TILE (9, 0) = 20
SET TILE (10, 0) = 20
SET TILE (11, 0) = 20
SET TILE (12, 0) = 20
SET TILE (13, 0) = 20
SET TILE (14, 0) = 20
END
END

ENTERING SCREEN 7
# Superficie
IF TRUE
THEN
SET TILE (0, 0) = 20
SET TILE (1, 0) = 20
SET TILE (2, 0) = 20
SET TILE (3, 0) = 20
SET TILE (4, 0) = 20
SET TILE (6, 0) = 20
SET TILE (7, 0) = 20
SET TILE (8, 0) = 20
SET TILE (9, 0) = 20
SET TILE (10, 0) = 20
SET TILE (11, 0) = 20
SET TILE (12, 0) = 20
SET TILE (13, 0) = 20
SET TILE (14, 0) = 20
END
END

ENTERING SCREEN 17
# Lata de fuel = Obj1
IF FLAG 2 = 0
THEN
SET TILE (13, 5) = 29
SET_FIRE_ZONE 177, 95, 193, 95
END
END

PRESS_FIRE AT SCREEN 17
# Si lo cojemos, añadirlo a lista
IF PLAYER_TOUCHES 13, 5
THEN
INC FLAG 2, 1
PRINT_TILE_AT (2, 21) = 29
SOUND 6
SET TILE (13, 5) = 0 // Borrar tile y poner fondo en su lugar
END
END

ENTERING SCREEN 30
# Barril de cerveza = Obj2
IF FLAG 3 = 0
THEN
SET TILE (1, 2) = 30
SET_FIRE_ZONE 1, 31, 17, 47
END
END

PRESS_FIRE AT SCREEN 30
# Si lo cojemos, añadirlo a lista
IF PLAYER_TOUCHES 1, 2
THEN
INC FLAG 3, 1
PRINT_TILE_AT (4, 21) = 30
SOUND 6
SET TILE (1, 2) = 0
END
END

ENTERING SCREEN 31
# Cartera comprometedora = Obj3
IF FLAG 4 = 0
THEN
SET TILE (13, 3) = 31
SET_FIRE_ZONE 193, 47, 193, 63
END
END

PRESS_FIRE AT SCREEN 31
# Si lo cojemos, añadirlo a lista
IF PLAYER_TOUCHES 13, 3
THEN
INC FLAG 4, 1
PRINT_TILE_AT (6, 21) = 31
SOUND 6
SET TILE (13, 3) = 0
END
END

# Comprobación si se han cogido los tres objetos especiales
# y final de juego.

ENTERING ANY
IF FLAG 2 = 1
THEN
IF FLAG 3 = 1
THEN
IF FLAG 4 = 1
THEN
TEXT DONE!_COME_BACK_TO_BASE
INC FLAG 5, 1
SOUND 6
SOUND 7
END
END
END
END

PRESS_FIRE AT SCREEN 0
# Detectar el contenedor al entrar en la cámara
# Comprobar si el jugador lleva todo
IF PLAYER_IN_X 17,49
IF PLAYER_IN_Y 111,143
IF OBJECT_COUNT = 15
THEN
IF FLAG 5 = 1
THEN
WIN GAME
END
END
END')

Re: Proyecto Aquanoids: el videojuego

Publicado: Mar, 11 Ago 2015, 15:08
por NeilParsons
Vaya mareo... :cabesa: :cabesa: :cabesa:

Re: Proyecto Aquanoids: el videojuego

Publicado: Mar, 11 Ago 2015, 15:10
por NeilParsons
Por cierto, estaba viendo una de las últimas versiones de la Churrera y me han hablado de que tiene más chicha que la versión que estaba usando y me llamó la atención lo de los tiles animados, entre otras cosas. Si acaso, preferiría utilizarlo en otro juego, si acaso me diese por hacer otro posteriormente.

Re: Proyecto Aquanoids: el videojuego

Publicado: Mar, 11 Ago 2015, 21:22
por elborra
Buenas Neil, ya se que puede ser un poco chorra, pero, ¿activaste en config.h el script?, como no haces referencia a ello en el post.

EDITO: En cuanto al script , como te comente no puedes poner IFs anidados, y tienes que tener cuidado con algunas de las condiciones porque se van a repetir continuamente porque la condición siempre se va a cumplir (esto con la práctica te darás cuenta en seguida).

SET_FIRE_ZONE lo que crea es un area en la zona de juego que automáticamente lanza el script cuando el personaje se encuentre sobre ella. mientras siga estando sobre la zona va a estar continuamente llamando al script. Por otro lado "IF PLAYER_TOUCHES " implica que si alguien está sobre el tile indicado y pulsa la tecla de disparo el script tambié se ejecutara tantas veces como pulsemos la tecla de acción. Por tanto , normalmente al usar estas dos instrucciones, tenemos que controlar con una flag (para que no se repita el proceso continuamente) el IF PLAYER_TOUCHES, tal y como lo haces en la parte de ENTERING

En el caso de la pantalla 17:
$this->bbcode_second_pass_code('', '
ENTERING SCREEN 17
# Lata de fuel = Obj1
IF FLAG 2 = 0
THEN
SET TILE (13, 5) = 29
SET_FIRE_ZONE 177, 95, 193, 95
END
END

PRESS_FIRE AT SCREEN 17
# Si lo cojemos, añadirlo a lista
IF PLAYER_TOUCHES 13, 5
IF FLAG 2 = 0 <------------------ Indispensable esta condición, sino cada vez que estemos tocando el tile 13,5 se ejecutaria todo el código.
THEN
INC FLAG 2, 1 <--------- Sigo pensando que es mejor que uses SET FLAG 2, 1 en lugar de incrementar la flag, pero esto es trivial y no afecta al código en este caso
PRINT_TILE_AT (2, 21) = 29
SOUND 6
SET TILE (13, 5) = 0 // Borrar tile y poner fondo en su lugar
END
END
')