Sobre las recargas "manuales"

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
Fabio
Mensajes: 44
Registrado: Vie, 17 Ene 2014, 21:52

Sobre las recargas "manuales"

Mensajepor Fabio » Sab, 22 Mar 2014, 02:48

Hola. Quisiera hacer lo mismo para el juego que estoy haciendo, pero tengo la version 3.99.2 de la churrera. El archivo engine.h, esta igual que como lo describen aqui y no tengo problemas para modificarlo. Pero el mainloop esta un poco diferente y no me atrevo a meter mano. Me podrian orientar como modificarlo acorde a la version que tengo yo? (3.99.2)

na_th_an escribió:D_Skywalk ha propuesto el siguiente cambio:

D_Skywalk escribió:Respecto a las recargas, [...] en la documentación dice algo como que las recargas salen aleatoriamente si el jugador ha cogido el objeto, en el lugar donde se puso el hotspot. Mi pregunta era que sabiendo que sólo puedo poner un hotspot por pantalla hay alguna forma sencilla donde se pueda configurar (usando un tipo nuevo?) que un hotspot sea recarga o sea objeto (trozo de espada).


Vamos a invalidar el comportamiento normal y a establecer la recarga como tipo de hotspot número 3. Usaremos el colocador para poner las recargas de vida como los objetos o las llaves, pero con tipo = 3.

En el código del motor hay que cambiar dos cosas: primero tendremos que modificar el código que dibuja el hotspot al entrar en una nueva pantalla. Este código está en la función draw_scr, a partir de la linea 1159 del archivo engine.h. Este trozo distingue si hemos cogido o no el objeto/llave/balas de un hotspot activo para mostrar el item correspondiente o, al azar, una recarga:

Código: Seleccionar todo

    if ((hotspots [n_pant].act == 1 && hotspots [n_pant].tipo) ||
        (hotspots [n_pant].act == 0 && (rand () & 7) == 2)) {
        hotspot_x = gpx << 4;
        hotspot_y = gpy << 4;
        orig_tile = map_buff [15 * gpy + gpx];
        draw_coloured_tile (VIEWPORT_X + gpx + gpx, VIEWPORT_Y + gpy + gpy, 16 + (hotspots [n_pant].act ? hotspots [n_pant].tipo : 0));
    }


Tendremos que modificarlo para que quede así:

Código: Seleccionar todo

    if (hotspots [n_pant].act == 1 && hotspots [n_pant].tipo) {
        hotspot_x = gpx << 4;
        hotspot_y = gpy << 4;
        orig_tile = map_buff [15 * gpy + gpx];
        draw_coloured_tile (VIEWPORT_X + gpx + gpx, VIEWPORT_Y + gpy + gpy, 16 + (hotspots [n_pant].tipo != 3 ? hotspots [n_pant].tipo : 0));
    }


Así, si el hotspot es de tipo 3 se dibujará el tile 16. Si vale 1, el 17 (objeto), si vale 2, el 18 (llave), y si vale 4, el 20 (munición). Ahora tenemos que cambiar la parte del código que se encarga de detectar cuando el jugador toca el hotspot. Este código se encuentra en el archivo mainloop.h, a partir de la linea 316. Se trata de mover el código que aparece en la primera rama del IF a un caso de la instrucción selectiva de más abajo. El código original es:

Código: Seleccionar todo

                // Was it an object, key or life boost?
                if (hotspots [n_pant].act == 0) {
                    player.life += PLAYER_REFILL;
                    if (player.life > PLAYER_LIFE)
                        player.life = PLAYER_LIFE;
                    hotspots [n_pant].act = 2;
                    peta_el_beeper (8);
                } else {                   
                    switch (hotspots [n_pant].tipo) {
#ifndef DEACTIVATE_OBJECTS                     
                        case 1:
#ifdef ONLY_ONE_OBJECT
                            if (player.objs == 0) {
                                player.objs ++;
                                peta_el_beeper (9);
                            } else {
                                peta_el_beeper (4);
                                draw_coloured_tile (VIEWPORT_X + (hotspot_x >> 3), VIEWPORT_Y + (hotspot_y >> 3), 17);
                                gpit = 1;
                            }
#else
                            player.objs ++;
                            peta_el_beeper (9);
                            break;
#endif
#endif
#ifndef DEACTIVATE_KEYS
                        case 2:
                            player.keys ++;
                            peta_el_beeper (7);
                            break;
#endif
#ifdef MAX_AMMO
                        case 4:
                            if (MAX_AMMO - player.ammo > AMMO_REFILL)
                                player.ammo += AMMO_REFILL;
                            else
                                player.ammo = MAX_AMMO;
                            peta_el_beeper (9);
                            break;
#endif
                    }
                    hotspots [n_pant].act = gpit;
                }
                hotspot_x = hotspot_y = 240;
            }   


Y debe quedar así:

Código: Seleccionar todo

                // Was it an object, key or life boost?
                if (hotspots [n_pant].act) {
                    switch (hotspots [n_pant].tipo) {
#ifndef DEACTIVATE_OBJECTS                     
                        case 1:
#ifdef ONLY_ONE_OBJECT
                            if (player.objs == 0) {
                                player.objs ++;
                                peta_el_beeper (9);
                            } else {
                                peta_el_beeper (4);
                                draw_coloured_tile (VIEWPORT_X + (hotspot_x >> 3), VIEWPORT_Y + (hotspot_y >> 3), 17);
                                gpit = 1;
                            }
#else
                            player.objs ++;
                            peta_el_beeper (9);
#endif
                            break;
#endif
#ifndef DEACTIVATE_KEYS
                        case 2:
                            player.keys ++;
                            peta_el_beeper (7);
                            break;
#endif
                        case 3:
                            player.life += PLAYER_REFILL;
                            if (player.life > PLAYER_LIFE)
                                player.life = PLAYER_LIFE;
                            peta_el_beeper (8);
                            break;
#ifdef MAX_AMMO
                        case 4:
                            if (MAX_AMMO - player.ammo > AMMO_REFILL)
                                player.ammo += AMMO_REFILL;
                            else
                                player.ammo = MAX_AMMO;
                            peta_el_beeper (9);
                            break;
#endif
                    }
                    hotspots [n_pant].act = gpit;
                }
                hotspot_x = hotspot_y = 240;
            }


(las explicaciones se refieren a al versión actual 3.99.1, es posible que las lineas bailen un poco en otras versiones)
Avatar de Usuario
son_link
Mensajes: 467
Registrado: Mar, 01 Oct 2013, 11:49
Ubicación: Atlantis, Galaxia Pegaso
Contactar:

Re: El hilo de las modificaciones a la Churrera

Mensajepor son_link » Sab, 22 Mar 2014, 08:08

Fabio, lo tengo implementado en Sami Troid desde la misma versión que usas. En las 3.99.3 ya viene de serie
LOAD TAPE ERROR
Imagen
Avatar de Usuario
Fabio
Mensajes: 44
Registrado: Vie, 17 Ene 2014, 21:52

Re: El hilo de las modificaciones a la Churrera

Mensajepor Fabio » Dom, 23 Mar 2014, 01:42

Es decir, si me bajo de la carpeta Dev el engine.h y el mainloop.h del link que me has pasado, y los reeemplazo por los mios , me tendria que andar sin mas?


son_link escribió:Fabio, lo tengo implementado en Sami Troid desde la misma versión que usas. En las 3.99.3 ya viene de serie
Avatar de Usuario
Fabio
Mensajes: 44
Registrado: Vie, 17 Ene 2014, 21:52

Re: El hilo de las modificaciones a la Churrera

Mensajepor Fabio » Lun, 24 Mar 2014, 02:00

No me funciono. Habra alguna diferencia.
Avatar de Usuario
son_link
Mensajes: 467
Registrado: Mar, 01 Oct 2013, 11:49
Ubicación: Atlantis, Galaxia Pegaso
Contactar:

Re: El hilo de las modificaciones a la Churrera

Mensajepor son_link » Mar, 25 Mar 2014, 22:01

Fabio, aquí lo tienes -> viewtopic.php?p=47736#p47736
LOAD TAPE ERROR
Imagen
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Sobre las recargas "manuales"

Mensajepor na_th_an » Mié, 26 Mar 2014, 17:51

Cada vez que os bajéis una nueva versión, tenéis que recordar leer "whatsnew.txt" donde se indica cómo usar todas las cosas nuevas que se incluyen.

Lo que quiere hacer fabio es esto:

Código: Seleccionar todo

Hotspots tipo 3
===============

Hemos hecho esta modificación, propuesta en el foro, fija a golpe de directiva.
Si defines

#define USE_HOTSPOTS_TYPE_3            // Alternate logic for recharges.

Las recargas aparecerán única y exclusivamente donde tú las coloques, usando
el hotspot de tipo 3.
Como diría Rorshach: "Urm..."
Avatar de Usuario
son_link
Mensajes: 467
Registrado: Mar, 01 Oct 2013, 11:49
Ubicación: Atlantis, Galaxia Pegaso
Contactar:

Re: Sobre las recargas "manuales"

Mensajepor son_link » Mié, 26 Mar 2014, 22:52

na_th_an escribió:Cada vez que os bajéis una nueva versión, tenéis que recordar leer "whatsnew.txt" donde se indica cómo usar todas las cosas nuevas que se incluyen.

Lo que quiere hacer fabio es esto:

Código: Seleccionar todo

Hotspots tipo 3
===============

Hemos hecho esta modificación, propuesta en el foro, fija a golpe de directiva.
Si defines

#define USE_HOTSPOTS_TYPE_3            // Alternate logic for recharges.

Las recargas aparecerán única y exclusivamente donde tú las coloques, usando
el hotspot de tipo 3.

Ya, pero esto no esta implementado en la 3.99.1 que es la que usa
LOAD TAPE ERROR
Imagen
Avatar de Usuario
Fabio
Mensajes: 44
Registrado: Vie, 17 Ene 2014, 21:52

Re: Sobre las recargas "manuales"

Mensajepor Fabio » Jue, 27 Mar 2014, 17:12

Claro, esa version que comenta na_th_an me parece que es la 3.99.3 que yo ni sabia que existia cuando empeze el juego. Es que el curso que sigo en el mundodelspectrum es con la 3.99.2. Voy a ver si me animo a usar esta nueva version. De todas formas les agradezco los comentarios y sugerencias.
Y una consulta son_link, esta modificacion que has hecho en TmxCnv va con windows?, lo pregunto porque en el titulo dice que es para GNU/Linux.
PD: De todas formas el nuevo juego (Guerrero Ninja) ya esta terminado (con la recarga al azar). En el proximo sera lo de poner la recarga donde yo quiera.
El link pueden verlo en la firma del mensaje (Junto al de Isidoro y Terrorlandia). Espero les guste.
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Sobre las recargas "manuales"

Mensajepor na_th_an » Jue, 27 Mar 2014, 19:07

Al. En ese caso la.modificación manualserá muy parecida. Aunque no te coincidan los números de línea, busca los trozos de código que deberíanser muy parecidos, si no iguales.

Enviado desde mi LT18i usando Tapatalk 2
Como diría Rorshach: "Urm..."
Avatar de Usuario
son_link
Mensajes: 467
Registrado: Mar, 01 Oct 2013, 11:49
Ubicación: Atlantis, Galaxia Pegaso
Contactar:

Re: Sobre las recargas "manuales"

Mensajepor son_link » Vie, 28 Mar 2014, 12:41

Solo tienes que compilarlo (o que alguien lo haga) para Windows.
Yo lo haria, pero solo tengo una maquina virtual con lo necesario en un XP, hasta que no haga limpieza en el disco, que sera este finde, no le meteré un 7 de 64 bits
LOAD TAPE ERROR
Imagen

Volver a “La Churrera”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado