Entiendo que los dos archivos tienen que coexistir en el programa a la vez, no ?
Si estás en c, yo creo que la mejor opción es tener una variable que redirija el flujo del programa en una dirección u otra. Lo más normal sería añadir un 4º parámetro a la función para elegir el camino... un int que haga las veces de booleano, por ejemplo.
Si no, también podrías sacar lo que es común a dos funciones independientes ( funcA ( para lo que hay antes del if ) y funcB ( para lo que hay después ), de tal forma que:
void Transicion(Datos* param,short incrx,short incry)
{
for (short ini = 1; ini < 21; ini++)
{
funcA( param, incrx, incry, i );
funcB( param, incrx, incry, i );
}
}
void Transicion2(Datos* param,short incrx,short incry)
{
for (short ini = 1; ini < 21; ini++)
{
funcA( param, incrx, incry, ini );
if (param->Valor == 1)
circlefill(param->Lienzo,param->X*20+10,param->Y*20+10,5,pallete_color[14]);
if (param->Valor == 2)
circlefill(param->Lienzo,param->X*20+10,param->Y*20+10,7,pallete_color[12]);
funcB( param, incrx, incry, ini );
}
}
Si estás en c++ podrías crear dos clases tal que una herede de la otra y sobreescriba la función o... si quieres aprovechar al máximo el código... que sobreescriba una función secundaria.
Me explico:
class A
{
public:
void Transicion( Datos* param, short incrx, short incry )
{
// ...
FuncIf( );
// ...
}
private:
virtual void FuncIf( Datos* param, short incrx, short incry )
{ }
};
class B : public A
{
virtual void FuncIf( Datos* param, short incrx, short incry )
{
if ( ... )
}
}