Página 8 de 13

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

Publicado: Vie, 12 Jun 2015, 10:58
por primy
Lo primero es lo primero; Elborra mucha información no es malo puede que ahora no entienda ni la mitad pero así queda registrado en el foro y puedo volver a consultarlo, como hace algunos mensajes más atrás que na_th_an me explicaba como pasar el juego de 48 a 128, es algo que tengo pendiente y que de seguro retomare cuando termine todo lo que quiero hacer, así que no es un mensaje puesto en vano :adore: :adore: .
La versión que estoy usando es la 3.1 y si estoy usando "COMPRESSED_LEVELS".
Lo segundo; na_th_an si me dices que hay que cambiar desde la línea 279 entonces lo he hecho mal, solo he cambiado "la línea 279" error mío al leer el manual.
Tercero; lo del sprite negro que chocaba al saltar (el video que os mande) ya lo solucione y el error estaba en el scrip, había puesto esto:

ENTERING SCREEN 19
; Decoracion
IF TRUE
THEN
; Graffiti
SET TILE (18, 5) = 30
SET TILE (19, 5) = 31
; Letrero Exit
SET TILE (9, 1) = 21
END
END

Claro el decorado se pintaba a tomar por cu.... y me daba esos errores, además los pinchos de abajo pintaban con error.
Creo que ya tengo los dos problemas solucionados :cheer: :cheer: voy a modificar el .h que estoy muy torpe maestros. :ayayay:
Una pregunta más por curiosidad que por otra cosa, en el .spt cuando comento una línea ¿pasa algo si pongo tildes o no es muy recomendable?

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

Publicado: Vie, 12 Jun 2015, 11:39
por primy
Efectivamente he cambiado los 0 por 7 y ya no me pasa lo del esqueleto, que importante es saber leer mira que me lo dijo mi padre "animalito, aprende a leer llegaras lejos" pues nada tendré que aprender :cafe:

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

Publicado: Lun, 15 Jun 2015, 14:45
por na_th_an
$this->bbcode_second_pass_quote('primy', 'L')o primero es lo primero; Elborra mucha información no es malo puede que ahora no entienda ni la mitad pero así queda registrado en el foro y puedo volver a consultarlo, como hace algunos mensajes más atrás que na_th_an me explicaba como pasar el juego de 48 a 128, es algo que tengo pendiente y que de seguro retomare cuando termine todo lo que quiero hacer, así que no es un mensaje puesto en vano :adore: :adore: .
La versión que estoy usando es la 3.1 y si estoy usando "COMPRESSED_LEVELS".
Lo segundo; na_th_an si me dices que hay que cambiar desde la línea 279 entonces lo he hecho mal, solo he cambiado "la línea 279" error mío al leer el manual.
Tercero; lo del sprite negro que chocaba al saltar (el video que os mande) ya lo solucione y el error estaba en el scrip, había puesto esto:

ENTERING SCREEN 19
; Decoracion
IF TRUE
THEN
; Graffiti
SET TILE (18, 5) = 30
SET TILE (19, 5) = 31
; Letrero Exit
SET TILE (9, 1) = 21
END
END

Claro el decorado se pintaba a tomar por cu.... y me daba esos errores, además los pinchos de abajo pintaban con error.
Creo que ya tengo los dos problemas solucionados :cheer: :cheer: voy a modificar el .h que estoy muy torpe maestros. :ayayay:
Una pregunta más por curiosidad que por otra cosa, en el .spt cuando comento una línea ¿pasa algo si pongo tildes o no es muy recomendable?


Así, rápido, que no tengo mucho rato: en SET_TILE hay que usar coordenadas de tile, no de caracter. La X va de 0 a 14 y la Y de 0 a 9.

Si quieres imprimir usando coordenads absolutas de caracter tienes que usar PRINT_TILE_AT, pero esos tiles no serán interactuables.

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

Publicado: Lun, 15 Jun 2015, 14:47
por na_th_an
Vaya, ahora leo más despacio y veo que lo habías resuelto.

Puedes poner cualquier caracter, los comentarios se ignoran.

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

Publicado: Lun, 22 Jun 2015, 16:46
por primy
Gracias por responder aunque no hiciera falta :lol: :lol:
Bueno quisiera preguntaros una duda, estoy con el final del juego y resulta que modifico el config.h pongo las coordenadas de fin y no pasa nada, no sé si me falta alguna opción que descomentar o algo que configurar. Ya os digo que he creado el ending.bin como en el manual y lo he puesto en \dev, al pasar por el punto en cuestión no sucede nada.
Os dejo el config.h


// Config.h
// Churrera v.4
// Copyleft 2010, 2011 The Mojon Twins

// ============================================================================
// I. General configuration
// ============================================================================

// In this section we define map dimmensions, initial and authomatic ending conditions, etc.

#define MAP_W 10 //
#define MAP_H 3 // Map dimmensions in screens
#define SCR_INICIO 24 // Initial screen
#define PLAYER_INI_X 7 //
#define PLAYER_INI_Y 1 // Initial tile coordinates
#define SCR_FIN 10 // Last screen. 99 = deactivated.
#define PLAYER_FIN_X 2 //
#define PLAYER_FIN_Y 1 // Player tile coordinates to finish game
#define PLAYER_NUM_OBJETOS 99 // Objects to get to finish game
#define PLAYER_LIFE 10 // Max and starting life gauge.
#define PLAYER_REFILL 1 // Life recharge
//#define COMPRESSED_LEVELS // use levels.h instead of mapa.h and enems.h (!)
//#define MAX_LEVELS 2 // # of compressed levels
//#define REFILL_ME // If defined, refill player on each level

// ============================================================================
// II. Engine type
// ============================================================================

// This section is used to define the game engine behaviour. Many directives are related,
// and others are mutually exclusive. I think this will be pretty obvious when you look at them.

// Right now the shooting engine is only compatible with the side-view engine.

// Bounding box size
// -----------------
// Comment both for normal 16x16 bounding box
#define BOUNDING_BOX_8_BOTTOM // 8x8 aligned to bottom center in 16x16
//#define BOUNDING_BOX_8_CENTERED // 8x8 aligned to center in 16x16
//#define SMALL_COLLISION // 8x8 centered collision instead of 12x12

// General directives:
// -------------------

#define PLAYER_AUTO_CHANGE_SCREEN // Player changes screen automaticly (no need to press direction)
//#define PLAYER_PUSH_BOXES // If defined, tile #14 is pushable
//#define FIRE_TO_PUSH
#define DIRECT_TO_PLAY // If defined, title screen is also the game frame.
//#define DEACTIVATE_KEYS // If defined, keys are not present.
#define DEACTIVATE_OBJECTS // If defined, objects are not present.
//#define ONLY_ONE_OBJECT // If defined, only one object can be carried at a time.
//#define OBJECT_COUNT 1 // Defines which FLAG will be used to store the object count.
//#define DEACTIVATE_EVIL_TILE // If defined, no killing tiles (behaviour 1) are detected.
#define FULL_BOUNCE // If defined, evil tile bounces equal MAX_VX, otherwise v/2
//#define PLAYER_BOUNCES // If defined, collisions make player bounce
//#define SLOW_DRAIN // Works with bounces. Drain is 4 times slower
#define PLAYER_FLICKERS // If defined, collisions make player flicker instead.
//#define MAP_BOTTOM_KILLS // If defined, exiting the map bottomwise kills.
//#define WALLS_STOP_ENEMIES // If defined... erm...
//#define ENABLE_PURSUERS // If defined, type 7 enemies are active
//#define DEATH_COUNT_EXPRESSION 8+(rand()&15)

// Shooting behaviour
// ------------------
/*
#define PLAYER_CAN_FIRE // If defined, shooting engine is enabled.
#define PLAYER_BULLET_SPEED 8 // Pixels/frame.
#define MAX_BULLETS 3 // Max number of bullets on screen. Be careful!.
#define PLAYER_BULLET_Y_OFFSET 6 // vertical offset from the player's top.
#define PLAYER_BULLET_X_OFFSET 0 // vertical offset from the player's left/right.
#define ENEMIES_LIFE_GAUGE 4 // Amount of shots needed to kill enemies.
#define RESPAWN_ON_ENTER // Enemies respawn when entering screen


#define ENABLE_RANDOM_RESPAWN // If defined, automatic flying enemies spawn on killed enemies
#define FANTY_MAX_V 256 // Flying enemies max speed.
#define FANTY_A 12 // Flying enemies acceleration.
#define FANTIES_LIFE_GAUGE 10 // Amount of shots needed to kill flying enemies.
*/

// Scripting
// ---------

#define ACTIVATE_SCRIPTING // Activates msc scripting and flag related stuff.
#define SCRIPTING_DOWN // Use DOWN as the action key.
//#define SCRIPTING_KEY_M // Use M as the action key instead.

// Top view:
// ---------

//#define PLAYER_MOGGY_STYLE // Enable top view.
//#define TOP_OVER_SIDE // UP/DOWN has priority over LEFT/RIGHT

// Side view:
// ----------

#define PLAYER_HAS_JUMP // If defined, player is able to jump.
//#define PLAYER_HAS_JETPAC // If defined, player can thrust a vertical jetpac
//#define PLAYER_KILLS_ENEMIES // If defined, stepping on enemies kills them
//#define PLAYER_MIN_KILLABLE 3 // Only kill enemies with id >= PLAYER_MIN_KILLABLE
//#define PLAYER_BOOTEE // Always jumping engine. Don't forget to disable "HAS_JUMP" and "HAS_JETPAC"!!!
//#define PLAYER_STEP_SOUND // Sound while walking. No effect in the BOOTEE engine.
//#define PLAYER_BOUNCE_WITH_WALLS // Bounce when hitting a wall. Only really useful in MOGGY_STYLE mode


// ============================================================================
// III. Screen configuration
// ============================================================================

// This sections defines how stuff is rendered, where to show counters, etcetera

#define VIEWPORT_X 1 //
#define VIEWPORT_Y 0 // Viewport character coordinates
#define LIFE_X 12 //
#define LIFE_Y 21 // Life gauge counter character coordinates
#define OBJECTS_X 99 //
#define OBJECTS_Y 99 // Objects counter character coordinates
#define OBJECTS_ICON_X 99 //
#define OBJECTS_ICON_Y 99 // Objects icon character coordinates (use with ONLY_ONE_OBJECT)
#define KEYS_X 21 //
#define KEYS_Y 21 // Keys counter character coordinates
#define KILLED_X 99 //
#define KILLED_Y 99 // Kills counter character coordinates
//#define PLAYER_SHOW_KILLS

// Graphic FX, uncomment which applies...

//#define USE_AUTO_SHADOWS // Automatic shadows made of darker attributes
//#define USE_AUTO_TILE_SHADOWS // Automatic shadows using specially defined tiles 32-47.
//#define UNPACKED_MAP // Full, uncompressed maps. Shadows settings are ignored.
//#define NO_MASKS // Sprites are rendered using OR instead of masks.
//#define PLAYER_ALTERNATE_ANIMATION // If defined, animation is 1,2,3,1,2,3...

// ============================================================================
// IV. Player movement configuration
// ============================================================================

// This section is used to define which constants are used in the gravity/acceleration engine.
// If a side-view engine is configured, we have to define vertical and horizontal constants
// separately. If a top-view engine is configured instead, the horizontal values are also
// applied to the vertical component, vertical values are ignored.

// IV.1. Vertical movement. Only for side-view.

#define PLAYER_MAX_VY_CAYENDO 512 // Max falling speed (512/64 = 8 pixels/frame)
#define PLAYER_G 48 // Gravity acceleration (32/64 = 0.5 píxeles/frame^2)

#define PLAYER_VY_INICIAL_SALTO 96 // Initial junp velocity (64/64 = 1 píxel/frame)
#define PLAYER_MAX_VY_SALTANDO 300 // Max jump velocity (320/64 = 5 píxels/frame)
#define PLAYER_INCR_SALTO 60 // acceleration while JUMP is pressed (48/64 = 0.75 píxeles/frame^2)

#define PLAYER_INCR_JETPAC 32 // Vertical jetpac gauge
#define PLAYER_MAX_VY_JETPAC 256 // Max vertical jetpac speed

// IV.2. Horizontal (side view) or general (top view) movement.

#define PLAYER_MAX_VX 256 // Max velocity (192/64 = 3 píxels/frame)
#define PLAYER_AX 48 // Acceleration (24/64 = 0,375 píxels/frame^2)
#define PLAYER_RX 64 // Friction (32/64 = 0,5 píxels/frame^2)

// ============================================================================
// V. Tile behaviour
// ============================================================================

// Defines the behaviour for each tile. Remember that if keys are activated, tile #15 is a bolt
// and, therefore, it should be made a full obstacle!

// 0 = Walkable (no action)
// 1 = Walkable and kills.
// 2 = Walkable and hides.
// 4 = Platform (only stops player if falling on it)
// 8 = Full obstacle (blocks player from all directions)
// 10 = special obstacle (pushing blocks OR locks!)
#ifndef COMPRESSED_LEVELS
unsigned char comportamiento_tiles [] = {
0, 8, 8, 8, 8, 8, 1, 1, 0, 0, 1, 0, 8, 1, 1, 10,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
#endif

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

Publicado: Mar, 23 Jun 2015, 07:57
por na_th_an
Es que eso (terminar por posición) no funciona :lol: Está ahí desde la Churrera 1.0 y nunca, y quiero decir nunca lo hemos usado.

Si quieres terminar cuando llegues a un punto específico del mapa, tienes que hacerlo como script. Dame un rato y te digo exactamente como (es que no recuerdo las particularidades de la Churrera para eso, sólo tengo cosas de MK2 en la cabeza y no la quiero cajcar).

Básicamente se trata de:

1.- Activar las fire zones (si no están activadas).
2.- Definir un fire zone desde el script en en ENTERING de la pantalla final (¿es la 10?) situada alrededor de la posición final (¿es 2, 1?)
3.- Hacer una cláusula PRESS_FIRE para esa pantalla que detecte si el jugador toca (2, 1) y, en ese caso, llamar a WIN GAME.

O eso, o modificar mainloop.h para que se pueda terminar por posición, cosa muy sencilla también y que si quieres te comento igualmente.

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

Publicado: Mar, 23 Jun 2015, 12:14
por primy
:o :o JAJAJAJA y yo vuelto loco mirando y mirando por que no funciona :lol: :lol:
Bueno lo del scrip me está costando un huevo, ya os lo advierto, me lio muy a menudo no diferencio bien entre el comando de comprobaciones, los comandos asociados a las comprobaciones, y su prima :?: la verdad que siguiendo el manual más o menos voy para adelante, pero mirando tu explicación sé que me quieres decir algo pero no lo pillo :cabesa:
Para no comeros mucho tiempo que tendréis cosas mejores que hacer, os pongo como creo que debería de quedar (no os riais mucho que tengo un cacao mental de coj....)


# Título tonto
# Copyleft 2015 Primysoft.
# Churrera 3.1

# flags:
# 1 -

ENTERING GAME
IF TRUE
THEN
END
END

ENTERING SCREEN 10
IF TRUE
THEN
SET_FIRE_ZONE 2, 1,
END
END
PRESS_FIRE AT SCREEN 10
IF PLAYER_TOUCHES 2, 1,
THEN
WIN GAME
END
END

Creo que sería así pero no descarto haber metido la pata hasta el fondo, o haber puesto una tontería.
Por cierto donde activo las fire zones en el config.h???? estoy buscando //#define ENABLE_FIRE_ZONE y no encuentro.

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

Publicado: Mar, 23 Jun 2015, 13:55
por na_th_an
El script que has puesto está bien salvo por la definición del fire zone. Tienes que definir un rectángulo, dando los valores de las dos esquinas, en pixels. En el último capítulo del tutorial explica cómo hacerlo y hay un ejemplo, creo, en el que se calcula el area óptima rodeando a un único tile, que es lo que tú necesitas.

Un "fire zone" en realidad no es más que un area de la pantalla que si el muñeco la toca, es como si hubieses pulsado la tecla de acción. O sea, que se ejecuta la sección PRESS_FIRE ON SCREEN n. Así conseguimos lo que quieres: el jugador toca alrededor del tile (2, 1), y se lanza PRESS_FIRE ON SCREEN 10. Ahí, tienes una cláusula que ejecuta WIN GAME si el jugador está en (2, 1). Con eso consigues el efecto.

¿Qué versión de la churrera estás usando? La 3.99.3c, que es la última que hay en la web, tiene esto en config.h:

$this->bbcode_second_pass_code('', '#define ENABLE_FIRE_ZONE // Allows to define a zone which auto-triggers "FIRE"')

De todos modos, puedes modificar levemente mainloop.h para conseguir lo mismo a través del código a pelo y sin usar el scripting. Si decides hacerlo así, obviamente podrás quitar todo eso de tu script porque no lo vas a usar.

Al menos en la 3.99.3c tienes que tocar en mainloop.h a partir de la linea 841. Si tienes otra versión te bailará, así que búscalo por ahí.

Tiene que haber un bloque de código tal que así:

$this->bbcode_second_pass_code('', ' // Win game condition
#ifdef ACTIVATE_SCRIPTING
if (player.objs == PLAYER_NUM_OBJETOS || script_result == 1) {
#else
if (player.objs == PLAYER_NUM_OBJETOS) {
#endif
if (
(n_pant == pant_final && ((player.x >> 10) == PLAYER_FIN_X && (player.y >> 10) == PLAYER_FIN_Y)) ||
pant_final == 99
) {
success = 1;
playing = 0;
}
}')

Está mal, porque no es completo. Tienes que eliminar todo eso y poner algo así:

$this->bbcode_second_pass_code('', '// CUSTOM {
// Win game condition
if (n_pant == SCR_FIN && ((player.x >> 10) == PLAYER_FIN_X && (player.y >> 10) == PLAYER_FIN_Y)) {
success = 1;
playing = 0;
}
// } END OF CUSTOM')

La detección es algo tosca. Si necesitas algo más fino dímelo y lo apaño.

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

Publicado: Mar, 23 Jun 2015, 16:33
por primy
Mier.....coles tengo la 4.7 :dad: lo sé por la estructura de las carpetas, eso es que tuve que ver las versiones y descargue la que me parecía más moderna :cry: :cry: por eso no aparece #define ENABLE_FIRE_ZONE
Puedo actualizar??? Me refiero que si al ser una versión tan vieja puedo actualizar de golpe a la 3.99.3c
Pues creo que modificare el mainloop.h por lo que comentas de que no voy a usar todo eso, así ahorro espacio.
Mil gracias

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

Publicado: Mié, 24 Jun 2015, 00:46
por na_th_an
Yo creo que a estas alturas lo mejor es lo del mainloop :D

Pero siempre puedes coger todas tus cosas y montar el proyecto de nuevo sobre una 3.99.3c limpia. Te tomará media hora a lo más. Seguro que menos.

Lo del baile de versiones es que nosotros fuimos avanzando y avanzando. De la 3.1 pasamos a la 4.0, que no salió porque es la de Sir Ababol 2 (que al final modificamos a saco), y luego Ramiro el Vampiro llevaba la 4.5... La 4.7 era la base de un proyecto que dejamos temporalmente en el tintero. Lo que pasa es que con Ramiro guarreamos tanto que estaba el tema infumable, así que cuando decidimos hacer el motor cogimos de base la 3.1 y la ampliamos con las cosas más generalistas que había hasta la 4.5... Nos curramos los 12 juegos de la Covertape 2 para probarla, y la sacamos como 3.99... Y a partir de ahí nos tiramos todo 2013 ampliando. Por eso 3.99 > 4.7 :D