[pokeemerald] Encuentro salvaje dependiendo de una flag

Avisos


Like Tree2Gracias
  • 2 Post By InmortalKaktus
Respuesta
 
Herramientas Desplegado
  #1  
09/03/2019
Predeterminado [pokeemerald] Encuentro salvaje dependiendo de una flag


ENCUENTRO SALVAJE DEPENDIENDO DE UNA FLAG




Con este método evitaremos los encuentros salvajes, aún así, encontraremos Pokémon si pescamos, y los encuentros por script seguirán funcionando, viene a ser como un repelente permanente, que podemos controlar con una flag.

Para crear el sistema sólo tenemos que editar "src/field_control_avatar.c", donde encontraremos esta función:

Código:
static bool8 CheckStandardWildEncounter(u16 metatileBehavior)
{
    if (sWildEncounterImmunitySteps < 4)
    {
        sWildEncounterImmunitySteps++;
        sPreviousPlayerMetatileBehavior = metatileBehavior;
        return FALSE;
    }

    if (StandardWildEncounter(metatileBehavior, sPreviousPlayerMetatileBehavior) == TRUE)
    {
        sWildEncounterImmunitySteps = 0;
        sPreviousPlayerMetatileBehavior = metatileBehavior;
        return TRUE;
    }

    sPreviousPlayerMetatileBehavior = metatileBehavior;
    return FALSE;
}
Que como su nombre describe, comprueba si cabe la posibilidad de que haya un encuentro salvaje, así que añadiremos un condicional que compruebe si una flag está activada para poder ejecutar el código. Podemos encontrar la lista de flags en "include/constants/flags.h".

Para comprobar si una flag está activada en un archivo .c, usaremos

Código:
FlagGet(FLAG)
Así que sabiendo esto, añadiremos un condicional para saber si la flag está activa. Yo usaré una flag que no es empleada en el juego, vosotros podéis usar la que queráis (siempre y cuando sepáis que estás haciendo)

Código:
static bool8 CheckStandardWildEncounter(u16 metatileBehavior)
{
	if (FlagGet(FLAG_UNUSED_0x020) != 0){
	
		if (sWildEncounterImmunitySteps < 4)
		{
			sWildEncounterImmunitySteps++;
			sPreviousPlayerMetatileBehavior = metatileBehavior;
			return FALSE;
		}

		if (StandardWildEncounter(metatileBehavior, sPreviousPlayerMetatileBehavior) == TRUE)
		{
			sWildEncounterImmunitySteps = 0;
			sPreviousPlayerMetatileBehavior = metatileBehavior;
			return TRUE;
		}

		sPreviousPlayerMetatileBehavior = metatileBehavior;
		return FALSE;
	}
}
Como podéis ver, he encerrado absolutamente todo el código en el condicional, y vosotros ahora mismo podrías estar pensando que porqué no encierro sólo el segundo condicional, que es el que realmente se ejecutará cuando haya un encuentro salvaje. Bueno, es simplemente para evitar que se ejecute código innecesario. Y ya tenemos el archivo .c listo. Fácil, ¿no?

Ahora, simplemente vamos a crear el script que compruebe en qué estado está la flag, y en función de ello, la active o la desactive.

Código:
Route117_ComprobarFlag::
	checkflag FLAG_UNUSED_0x020
	vgoto_if 1, Route117_FlagActivada
	setflag FLAG_UNUSED_0x020
	msgbox Route117_Text_FlagActivada, MSGBOX_NPC
	end
	
Route117_FlagActivada::
	clearflag FLAG_UNUSED_0x020
	msgbox Route117_Text_FlagDesactivada, MSGBOX_NPC
	end

Route117_Text_FlagActivada: 
	.string "Encuentros salvajes\n"
	.string "activados.$"
	
Route117_Text_FlagDesactivada: 
	.string "Encuentros salvajes\n"
	.string "desactivados.$"
Y ya tenemos todo listo. Guardamos, asignamos la etiqueta del script a cualquier NPC, compilamos, y lo probamos.

Gracias: Jon. y Disturbo

Respuesta

Herramientas
Desplegado

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Desactivado



Extra
Estilo clásico
La franja horaria es GMT +1. Ahora son las 10:19.

© Whack a Hack! 2019