Example #1
0
static void step_enemies(void)
{
	uint8_t acted[4] = {255, 255, 255, 255};
	uint8_t num_acted = 0;

	for(int8_t i=0; i<MAP_SIZE; i++){
		uint8_t t = g_map[i];
		if(t != SNAKE && t != GOBLIN && t != ELLA && t != DRAGON)
			continue;
		for(uint8_t acted_i=0; acted_i<sizeof acted; acted_i++){
			if(acted[acted_i] == i)
				goto skip_act;
		}
		int8_t new_i = ai_action(i, t);
		if(new_i != i){
			uint8_t t2 = g_map[new_i];
			g_map[new_i] = t;
			g_map[i] = t2;
		}
		if(num_acted < sizeof acted)
			acted[num_acted++] = new_i;
skip_act:
		continue;
	}
}
void ai_evasive(int player, int target, int location, 
								AI_Distances *distances) {
	int dirdiff = (4 + 
								 game->player[player].data->dir -
								 game->player[target].data->dir) % 4;
	// printf("evasive mode (%d,%d,%d)\n", player, target, location);
	
	ai_action(evasive_action[location][dirdiff], player, distances);
}
void ai_aggressive(int player, int target, int location,
									 AI_Distances *distances, AI_Parameters *pAIParameters) {
	int dirdiff = (4 + 
								 game->player[player].data->dir -
								 game->player[target].data->dir) % 4;
	
	// printf("aggressive mode (%d, %d)\n", player, target, location, dirdiff);

	ai_action(agressive_action[location][dirdiff], player, distances, pAIParameters);
}