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); }