Posted: 12 Dec 2005, 22:50
Argh you should make an AI too!
Open Source Realtime Strategy Game Engine
https://springrts.com/phpbb/
The ai will learn which units are effective against which units.AI sends three units up a hill. My HLT kills them. What has the AI "learned"?
1. "I shouldn't send my units up hills". That's bloody stupid. That hill is mine, for all time.
2. "I should send more units up there next time". Pretty stupid, but it might work, with a reinforcement loop, it'll send a huge wave and take the HLT down, eventually. OTA more-or-less worked like that.
3. "I should send different units that way next time". Really, really stupid. Whatever it draws out've the "hat" is unlikely to be better in any fundamental way, unless used right.
n... number of unitsThe database will be hundreds of gigs
You will have to change your code too!And it'll be broken if you change anything about the game's rules, because that effectively makes it into a new game.
Learning is exactly the thing that makes the AI NOT make the same mistakes over and over again...I think that AIs that "learn" are just going to make the same mistakes over and over again,
Realise that a million simple operations is nothing in C++ and todays CPUs...I saw one post that referred to millions of iterations... just to scan for metal and make decisions about planting mexes.
This will be done the first time you play a new map and then never again! And how do you want to find good build places for mexes?I saw one post that referred to millions of iterations... just to scan for metal and make decisions about planting mexes.
Actually this is very well possible. The AI knows what it's doing, so it can use this kind of information if stored properly."Peewees which attack without artillery support are a lot more likely to die on cheap static defenses than they are with artillery support".
Code: Select all
;/////////////////////////////////////////
;////////////////////////////////////////////////
;//////////////////////////////////////////////////////
;/////////////////////////////////////////////////////////// EASY
;//////////////////////////////////////////////////////
;////////////////////////////////////////////////
;/////////////////////////////////////////
[Pilot]
nickname = pilot_fighter_easy
job_id = fighter_easy_job
formation_id= formation_fighter_easy
;///////////////////////////////////////////////////////////////////////// DEFENSIVE IDS
missile_reaction_id = missile_reaction_fighter_easy
evade_dodge_id = evade_dodge_fighter_easy
evade_break_id = evade_break_fighter_easy
damage_reaction_id = damage_reaction_fighter_easy
countermeasure_id = countermeasure_fighter_easy
repair_id = repair_fighter_easy
;///////////////////////////////////////////////////////////////////////// OFFENSIVE IDS
gun_id = gun_fighter_easy
missile_id = missile_fighter_easy
mine_id = mine_fighter_easy
buzz_head_toward_id = buzz_head_toward_fighter_easy
buzz_pass_by_id = buzz_pass_by_fighter_easy
trail_id = trail_fighter_easy
strafe_id = strafe_fighter_easy
;//////////////////////////////////////////////////////////////////////// JOBBLOCK
[JobBlock]
nickname = fighter_easy_job
wait_for_leader_target = False
maximum_leader_target_distance = 20000
flee_when_leader_flees_style = False
scene_toughness_threshold = hardest
flee_scene_threat_style = hardest
flee_when_hull_damaged_percent = 0.25
flee_no_weapons_style = False
loot_flee_threshold = hardest
attack_subtarget_order = anything
field_targeting = always
loot_preference = lt_all
force_attack_formation = False
combat_drift_distance = 20000
attack_preference = fighter, 5000, guns | Torpedo| guided | unguided
attack_preference = freighter, 5000, guns | Torpedo| guided | unguided
attack_preference = transport, 5000, guns | Torpedo| guided | unguided
attack_preference = gunboat, 5000, Torpedo | guided | guns | unguided
attack_preference = cruiser, 5000, Torpedo | guided | guns | unguided
attack_preference = capital, 5000, Torpedo | guided | guns | unguided
attack_preference = weapons_platform, 5000, guns | Torpedo| guided | unguided
attack_preference = solar, 5000, Torpedo | guided | guns | unguided
attack_preference = anything, 5000, guns | Torpedo| guided | unguided
;///////////////////////////////////////////////////////////////////////// FORMATION
[FormationBlock]
nickname = formation_fighter_easy
force_attack_formation_active_time = 0
force_attack_formation_unactive_time = 0
break_formation_damage_trigger_percent = 0.999999
break_formation_damage_trigger_time = 0
break_formation_missile_reaction_time = 0
break_apart_formation_missile_reaction_time = 0
break_apart_formation_on_evade_break = True
break_formation_on_evade_break_time = 1
formation_exit_top_turn_break_away_throttle = 1
formation_exit_roll_outrun_throttle = 1
formation_exit_max_time = 5
;///////////////////////////////////////////////////////////////////////// DEFENSIVE
[MissileReactionBlock]
nickname = missile_reaction_fighter_easy
evade_missile_distance = 1000
evade_break_missile_reaction_time = 1
evade_slide_missile_reaction_time = 1
evade_afterburn_missile_reaction_time = 1
;///////////////////////////////////////////////////////////////////////// DEFENSIVE
[EvadeDodgeBlock]
nickname = evade_dodge_fighter_easy
evade_dodge_style_weight = corkscrew, 1.000000
evade_dodge_cone_angle = 20
evade_dodge_interval_time = 2
evade_dodge_time = 2
evade_dodge_distance = 200
evade_activate_range = 250
evade_dodge_roll_angle = 0
evade_dodge_waggle_axis_cone_angle = 0
evade_dodge_slide_throttle = 1
evade_dodge_turn_throttle = 1
evade_dodge_corkscrew_turn_throttle = 0.750000
evade_dodge_corkscrew_roll_throttle = 0.500000
evade_dodge_corkscrew_roll_flip_direction = False
evade_dodge_interval_time_variance_percent = 0.500000
evade_dodge_cone_angle_variance_percent = 0.500000
;///////////////////////////////////////////////////////////////////////// DEFENSIVE
[EvadeBreakBlock]
nickname = evade_break_fighter_easy
evade_break_roll_throttle = 0.100000
evade_break_time = 5
evade_break_interval_time = 2.500000
evade_break_afterburner_delay = 0
evade_break_turn_throttle = 1
evade_break_direction_weight = up, 1.000000
evade_break_direction_weight = down, 1.000000
evade_break_direction_weight = left, 1.000000
evade_break_direction_weight = right, 1.000000
evade_break_style_weight = sideways, 1.000000
evade_break_style_weight = outrun, 1.000000
evade_break_style_weight = reverse, 1.000000
;///////////////////////////////////////////////////////////////////////// DEFENSIVE
[DamageReactionBlock]
nickname = damage_reaction_fighter_easy
evade_break_damage_trigger_percent = 1
evade_dodge_more_damage_trigger_percent = 0.250000
engine_kill_face_damage_trigger_percent = 1
engine_kill_face_damage_trigger_time = 1
roll_damage_trigger_percent = 0.300000
roll_damage_trigger_time = 1
afterburner_damage_trigger_percent = 0.200000
afterburner_damage_trigger_time = 0.500000
brake_reverse_damage_trigger_percent = 1
drop_mines_damage_trigger_percent = 0.250000
drop_mines_damage_trigger_time = 0.100000
fire_guns_damage_trigger_percent = 1
fire_guns_damage_trigger_time = 1
fire_missiles_damage_trigger_percent = 1
fire_missiles_damage_trigger_time = 1
;///////////////////////////////////////////////////////////////////////// DEFENSIVE
[CountermeasureBlock]
nickname = countermeasure_fighter_easy
countermeasure_active_time = 3
countermeasure_unactive_time = 3
;///////////////////////////////////////////////////////////////////////// DEFENSIVE
[RepairBlock]
nickname = repair_fighter_easy
use_shield_repair_pre_delay = 0.1
use_shield_repair_post_delay = 0.1
use_shield_repair_at_damage_percent = 0.5
use_hull_repair_pre_delay = 0
use_hull_repair_post_delay = 0
use_hull_repair_at_damage_percent = 0
;/////////////////////////////////////////
;////////////////////////////////////////////////
;//////////////////////////////////////////////////////
;///////////////////////////////////////////////////////////////////////// OFFENSIVE
[GunBlock]
nickname = gun_fighter_easy
gun_fire_interval_time = 0
gun_fire_interval_variance_percent = 0.5
gun_fire_burst_interval_time = 4
gun_fire_burst_interval_variance_percent = 0.500000
gun_fire_no_burst_interval_time = 4
gun_fire_accuracy_cone_angle = 4
gun_fire_accuracy_power = 1.100000
gun_range_threshold = 1.000000
gun_target_point_switch_time = 0.5
fire_style = multiple
auto_turret_interval_time = 0
auto_turret_burst_interval_time = 3
auto_turret_no_burst_interval_time = 3
auto_turret_burst_interval_variance_percent = 0.200000
gun_range_threshold_variance_percent = 0.200000
gun_fire_accuracy_power_npc = 1
;///////////////////////////////////////////////////////////////////////// OFFENSIVE
[MissileBlock]
nickname = missile_fighter_easy
missile_launch_interval_time = 30
missile_launch_interval_variance_percent = 0.500000
missile_launch_range = 2000
missile_launch_cone_angle = 22.500000
missile_launch_allow_out_of_range = False
;///////////////////////////////////////////////////////////////////////// OFFENSIVE
[MineBlock]
nickname = mine_fighter_easy
mine_launch_interval = 10
mine_launch_cone_angle = 360
mine_launch_range = 250
;///////////////////////////////////////////////////////////////////////// OFFENSIVE
[BuzzHeadTowardBlock]
nickname = buzz_head_toward_fighter_easy
buzz_min_distance_to_head_toward = 500
buzz_min_distance_to_head_toward_variance_percent = 0.100000
buzz_max_time_to_head_away = 5
buzz_head_toward_engine_throttle = 1
buzz_head_toward_turn_throttle = 1
buzz_head_toward_roll_throttle = 1
buzz_head_toward_style_weight = straight_to, 1.000000
;///////////////////////////////////////////////////////////////////////// OFFENSIVE
[BuzzPassByBlock]
nickname = buzz_pass_by_fighter_easy
buzz_distance_to_pass_by = 100
buzz_pass_by_time = 1
buzz_break_turn_throttle = 1
buzz_break_direction_weight = left, 1.000000
buzz_break_direction_weight = right, 1.000000
buzz_pass_by_style_weight = break_away, 1.000000
;///////////////////////////////////////////////////////////////////////// OFFENSIVE
[TrailBlock]
nickname = trail_fighter_easy
trail_lock_cone_angle = 30
trail_break_time = 2.000000
trail_max_turn_throttle = 0.6
trail_distance = 300
[StrafeBlock]
nickname = strafe_fighter_easy
strafe_run_away_distance = 100
strafe_attack_throttle = 1