Jump to content


Photo

Multiple AI Tactics


34 replies to this topic

#21 giskard

giskard
  • Members
  • 155 posts

Posted 23 February 2005 - 08:01 AM

Right I got you now.
Ive not edited that file or even looked at it long enough to remember it.

Your right.

Before i start i should explain my AI is too good right now. I have to slow the dam thing down because the extra speed means its out there very early on and so gets extra resources much earlier too. It also doesnt wait as long as it used too.

The only way to possibly beat it is to get to the resources before it does. You have a fighting chance if you do this but you cannot possibly defend all the posts you capture this early on so its right old battle right from the start of the game.

Lets start with my test setup.

The difficulty files.

You can more or less see what needs changing in this, its a matter of personaly preference and the army list sections are pretty straight forward so i'll leave those to you to explore unless you really want me to post mine in which case i will.

BTW Larkin: the infantry AI is actually better than any of the other AIs. Tested it properly last night and its way to strong.

First off 2 initial build queue examples.

My rusher AI first.
space_marine_race =
	{
  { "flag_capture" }, { "post_builder" },
  { "flag_capture" }, { "post_builder" },
  { "flag_capture" }, { "post_builder" },
  { "squad", "space_marine_squad_scout" },
  { "squad", "space_marine_squad_scout" },
  { "squad", "space_marine_squad_servitor" },
  { "building", "space_marine_barracks" },
  { "building", "space_marine_armoury" },
  { "squad", "space_marine_squad_scout" },
  { "squad", "space_marine_squad_scout" },
  { "building", "space_marine_armoury" },
	},

Now the assault AI.

 { "flag_capture" }, { "post_builder" },
  { "flag_capture" }, { "post_builder" },
  { "squad", "space_marine_squad_scout" },
  { "squad", "space_marine_squad_servitor" },
  { "squad", "space_marine_squad_servitor" },
  { "building", "space_marine_barracks" },
  { "building", "space_marine_armoury" },
  { "squad", "space_marine_squad_assault" },
  { "squad", "space_marine_squad_assault" },
  { "flag_capture" }, { "post_builder" },
  { "squad", "space_marine_squad_force_commander", true },
	},

The addition scouts in the rusher AI is the thing that makes rusher AI and the infantry AI so strong early on. Remove a few and it slows down the AI a lot.

However thats not the whole story.

Lets move on to my current CPU Manager file entries. Again only hard is being tested so check out the hard entry.

function CpuManager:LoadStrategyInfo(setstrategychoice)

	local settings = self.cpu_player:GetDifficultyLevel()
	setstrategychoice = math.random(1,5)
        -- Test settings to allow testing of each AI personality one at a time, choices 1 to 5.
        --setstrategychoice = 5

	if settings == CpuPlayer.AD_Easy then
  import( "Strategies/Easy/BuildBaseStrategyInfo.ai" )
  import( "Strategies/Easy/AttackStrategyInfo.ai" )
  import( "Strategies/Easy/BuildOrderStrategyInfo.ai" )
  print( "loading easy AI" )
	elseif settings == CpuPlayer.AD_Standard then
  import( "Strategies/Standard/BuildBaseStrategyInfo.ai" )
  import( "Strategies/Standard/AttackStrategyInfo.ai" )
  import( "Strategies/Standard/BuildOrderStrategyInfo.ai" )
  print( "loading standard AI" )
	elseif settings == CpuPlayer.AD_Hard then
       if setstrategychoice == 1 then
  import( "Strategies/Hard/BuildBaseStrategyInfo.ai" )
  import( "Strategies/Hard/AttackStrategyInfo.ai" )
  import( "Strategies/Hard/BuildOrderStrategyInfo.ai" )
  print( "loading hard AI" )
       elseif  setstrategychoice == 2 then
  import( "Strategies/Hardrusher/BuildBaseStrategyInfo.ai" )
  import( "Strategies/Hardrusher/AttackStrategyInfo.ai" )
  import( "Strategies/Hardrusher/BuildOrderStrategyInfo.ai" )
  print( "loading Hardrusher AI" )
       elseif  setstrategychoice == 3 then
  import( "Strategies/HardVehicle/BuildBaseStrategyInfo.ai" )
  import( "Strategies/HardVehicle/AttackStrategyInfo.ai" )
  import( "Strategies/HardVehicle/BuildOrderStrategyInfo.ai" )
  print( "loading HardVehicle AI" )
       elseif  setstrategychoice == 4 then
  import( "Strategies/HardAssault/BuildBaseStrategyInfo.ai" )
  import( "Strategies/HardAssault/AttackStrategyInfo.ai" )
  import( "Strategies/HardAssault/BuildOrderStrategyInfo.ai" )
  print( "loading HardAssault AI" )
       elseif  setstrategychoice == 5 then
  import( "Strategies/HardInfantry/BuildBaseStrategyInfo.ai" )
  import( "Strategies/HardInfantry/AttackStrategyInfo.ai" )
  import( "Strategies/HardInfantry/BuildOrderStrategyInfo.ai" )
  print( "loading HardInfantry AI" )
       end
	elseif settings == CpuPlayer.AD_Advanced then
  import( "Strategies/Advanced/BuildBaseStrategyInfo.ai" )
  import( "Strategies/Advanced/AttackStrategyInfo.ai" )
  import( "Strategies/Advanced/BuildOrderStrategyInfo.ai" )
  print( "loading advanced AI" )
	elseif settings == CpuPlayer.AD_Insane then
  --still uses advanced logic
  import( "Strategies/Advanced/BuildBaseStrategyInfo.ai" ) 
  import( "Strategies/Advanced/AttackStrategyInfo.ai" )
  import( "Strategies/Advanced/BuildOrderStrategyInfo.ai" )
  print( "loading insane AI" )
	else
  dbBreak()
	end
	
end

It does the choosing and loads my custom AI difficulty files. But thats not what has the biggest effect on the AIs speed and effectiveness.

This is = BuildBaseStrategy file.

First the Un-nerfing.
In the BuildbaseStrategy file look for the function ...

function BuildBaseStrategy:DoBuildUnits()

Then look for this section, You cans see in the example below what lines ive commented out. Its a quick and dirty solution but works. The AI no longer Cares. It still reinforces and it doesnt get restricted.

Its basically always true so ive effectively disable the original code.

 --don't build units if I'm doing too well
  --must have at least 400 worth of army, though
  if army_cost > 400 and army_cost >= enemy_army_cost*self.info.max_army_percentage then
  	aitrace("too strong: don't build stuff")
  	--Tactic.Options.can_reinforce = false
  	Tactic.Options.can_reinforce = true
  	
  	--global used to check if I can build anything
  	--cpu_manager:SetRestrictMilitary( true )
  	cpu_manager:SetRestrictMilitary( false )
  	return
  else
  	Tactic.Options.can_reinforce = true
  	cpu_manager:SetRestrictMilitary( false )
  end

	end

In the same file and in the same function look for this next.

See the two lines that say "if ticks_passed < 30*8 then" ?
They originally said 60.

Ive tried 45 too but that had some unwelcome side effects, 60 works, 30 works but 45 had my AI building 2 of everything. Well one of them anyway. The others seemed ok.

This change alone is what speeds yup my AI to the point where its too fast. Im currently looking for a way to slow it down.

Please remember im still testing this, so consider it unsafe until youve tested it your self.

BTW This little edit can cause some serious system lag on slower computers. I tested it in an 8 way game on my Athlon 2000+ and i experienced some none responsive moments during battles. But it was under some extreme conditions.

 --figure out ticks passed
  local ticks_passed = game_time - self.build_now_timer
  aitrace( tostring(ticks_passed) )
  
  --call alternately every one minute
  if ticks_passed < 30*8 then
  	aitrace("building stuff for NOW")
  	self:BuildNow()
  else
  	Tactic.ResourceFloor.requisition = 600
  	aitrace("building stuff for LATER")
  	self:BuildLater()
  	if ticks_passed >= 30*8*2 then
    self.build_now_timer = 0
  	end
  end
  
	end

Also since the self.info.var stuff never worked when i added a new var to the difficulty files i was thinking of looking up a default var and using that to check what AI is being used.

For example. Heres a line from Strategy base info thats different at every difficulty level.

 --reserve this amount for building units/buildings (not for use in upgrading/ reinforcing)
  req_reserve = 150,[/code

Now suppose i edited that line in each personality so it starts at 150 for the default AI and goes up to 155 for the last AI personality. Then did the same thing at all difficulty levels. Eg increase the number by 1 for each personality. 

If i did that id be able to do a cpu manager lookup of the value and it should work because the CPU manager ready knows about that var. 

So id just need a new function called get personality. 

Then do an if difficulty = hard and req_reserver = 154 then the AI is the Assault AI. 

This var could then be used to setup the update build queue too. 

Thats my theory anyway.

So far every attempt ive made has ment when a none responsive AI or worse yet and AI failure.

So im hoping by reusing the standard vars i can sneak one past the game code and get it to accept my idea for the update queue.

Though i dont see me getting away with not editing the update section of buildbasestrategy. I think im going to have to completely replace it with the above check and then call another function to do the updating for each personality. 

In fact it may be better doing it from the buildbasestrategy file rather than the cpumanager anyway. 

Finally, for Larkin.

Heres my build order for the Default Eldar AI. The one that builds the Warp Spiders. Notice there is no Warp Spider entries. It really is a case of fixing that Aspect Stone Research and correcting the army lists which i'll show you below. One of them anyway. 

[code]
	eldar_race =
	{
  { "building", "eldar_webway_gate" },
  { "building", "eldar_aspect_portal" },
  { "flag_capture" }, { "post_builder" },
  { "flag_capture" }, { "post_builder" },
  { "squad", "eldar_guardian_squad" },
  { "squad", "eldar_guardian_squad" },
  { "squad", "eldar_squad_bonesinger" },
  { "squad", "eldar_squad_farseer", true },
	}

My Default AI Army List for the Eldar from Buildbasestrategyinfo. Editing these is a must really. The AIs stupid without a list like this at every difficulty level. You can add as many as you want. Call them any name since it does a count of how many entries exist and choses them by their position on the list of armies it can build rather than by name.

Its just an array call basically.

standard =
  	{
    eldar_squad_farseer = 1,
    eldar_squad_seer_council = 1,
    eldar_squad_bonesinger = 0,
    eldar_squad_rangers = 1,
    eldar_guardian_squad = 3,
    eldar_squad_banshees = 2,
    eldar_squad_warp_spider = 3,
    eldar_squad_dark_reapers = 3,
    eldar_squad_grav_platform = 3,
    eldar_squad_grav_platform_brightlance = 3,
    	eldar_squad_vypers = 2,
    eldar_squad_falcon_grav_tank = 2,
    eldar_squad_wraithlord = 4,
                  eldar_squad_fire_prism = 3,
                  eldar_squad_avatar = 1,
  	},

Please note that ive increased the squad cap in my mod so it can build a lot more troops before it maxes out. The new Cap is about 35 for Eldar troops. I forget exactly but thats roughtly right.

Having said that, if all you do is copy the entry above and paste it back under the name bigarmy or anything you like and just change the avatar from 1 to a 0, then when ever the Eldar play it will have a 50/50 chance of the Avatar appearing instead of a 100% change of it appearing.

A Simple trick but it works.

Giskard

Edited by giskard, 23 February 2005 - 08:05 AM.


#22 giskard

giskard
  • Members
  • 155 posts

Posted 23 February 2005 - 08:09 AM

Before I log off.

The idea about linking to an existing var to identify the personality being used so the entire upgrade queue can also be different for each personality is not something ive tried yet.

I did try adding my own to the buildbasestrategyinfos but the AI just didnt work after words. I tried adding a check to the cpumanager in a brand new function and get the AI at the time it chose it but it never worked either.

I had if this = that then lines in the update function and the AI just sat there doing nothing.

Now the idea above assumes its the additional vars causing the problem and not the use of an IF statement in the update state. If its the latter than the above idea wont work either.

You see, when it comes time to check the Var, the AI fails to make the choice. IT just stops at the IF statement. Which means its either not reading the Var or doesnt like the IF statement at that location in the update function.

Giskard

Edited by giskard, 23 February 2005 - 08:10 AM.


#23 LarkinVB

LarkinVB

    title available

  • Members
  • 1,488 posts

Posted 23 February 2005 - 08:59 AM

Also since the self.info.var stuff never worked when i added a new var to the difficulty files i was thinking of looking up a default var and using that to check what AI is being used.


Where is the problem for you ? I've done it already with turrets and it worked

You seem think the AI is better with your unnerfing changes but this can't be true as the whole code section you tweaked is only valid for

--don't go bigger than my opponent's army
	if self.info.max_army_percentage ~= nil then

which isn't true for harder/insane where self.info.max_army_percentage is nil.

Your changes are valid for lower difficulty levels but whats the sense in doing that ? Unnerfing lower levels will make them act like higher ones. So you can use the high levels in first place ? Don't understand your ratio here. Any scripts other the advanced ones should be ignored for AI modding at all. Whats the sense in improving on scripts which were nerfed on purpose ?

It does the choosing and loads my custom AI difficulty files. But thats not what has the biggest effect on the AIs speed and effectiveness.

This is = BuildBaseStrategy file.

First the Un-nerfing.
In the BuildbaseStrategy file look for the function ...

function BuildBaseStrategy:DoBuildUnits()

Then look for this section, You cans see in the example below what lines ive commented out. Its a quick and dirty solution but works. The AI no longer Cares. It still reinforces and it doesnt get restricted.

Its basically always true so ive effectively disable the original code.

--don't build units if I'm doing too well
 --must have at least 400 worth of army, though
 if army_cost > 400 and army_cost >= enemy_army_cost*self.info.max_army_percentage then
  aitrace("too strong: don't build stuff")
  --Tactic.Options.can_reinforce = false
  Tactic.Options.can_reinforce = true
 
  --global used to check if I can build anything
  --cpu_manager:SetRestrictMilitary( true )
  cpu_manager:SetRestrictMilitary( false )
  return
 else
  Tactic.Options.can_reinforce = true
  cpu_manager:SetRestrictMilitary( false )
 end

end


Your time tweak from 60 to 30 is just changing the alternation sequence between BuildNow() and BuildLater() and will in no way speed up the AI nor will it put a greater burden on the CPU. The function which calls them is not accessed more often by your tweak so all you do is

TIME DEFAULT GISKARD


1:00 BuildNow() BuildNow()
1:30 BuildNow() BuildLater()
2:00 BuildLater() BuildNow()
2:30 BuildLater() BuildLater()


Thats the only difference.
I tell you why your AI seems strong. You have no turrets in default build queue and a lot of resourcers. Good luck with your next tweaks. I will pick up your idea of multiple personalities for my mod.

Edited by LarkinVB, 23 February 2005 - 11:11 AM.


#24 giskard

giskard
  • Members
  • 155 posts

Posted 23 February 2005 - 07:26 PM

Actually the way it works in the game is the AI builds a new unit every 30 seconds and doesnt dilly dally around for a minute before it decides what to do next.

So assuming everything it wants is available, it can have 10 units ready in 5 minutes instead of 5 units. In 10 minutes it has 20 units.

Now 10 units scouting for resources does twice as well as 5 so it has knock on effect.

My AIs turrets come after power in the update state which used to happen much faster than it does in the new queue since the AI is building faster now, it runs out of resources and goes looking for them much early in much greater numbers.

So the early map looks like its alive with combat.

One other thing.

IF you change this line to 500 you effectively tell the AI to avoid combat early on.

attack_rating = 200,

Ive seen the AIs run past each other with an attack rating of 500 yet it only does so for the first few minutes of the game then. So it hits the 500 mark pretty quickly.

Assuming the rating is actually cost of the unit then thats 1 scout and 2 tactical before it can attack, or in my mod 2 tactical. If its building scouts, it will 3 or 4 scout units before its allowed to attack, if its building bigger units then it will have 2 of them before its allowed to attack.

I know this is simple but its cool way of delaying the first encounters if thats what you want to do. Personally i dont but i may tweak this to get the AI to wait for a minute or so.

Giskard

#25 giskard

giskard
  • Members
  • 155 posts

Posted 23 February 2005 - 07:35 PM

BTW: that max percentage is left intact because its how the difficulty levels are controled. Ive not messed with that.

The thing is that the AI never reaches its max percentage in the default game. It loses its units too fast to amass and army of a decent size. So making it build 2 units per minute allows it to do that.

Basically it allows the AI to build faster than it can lose units.
However I also tweaked these as well from the attack info ai files.

stop_attack_rating = -100,
min_units = 1,

So some of my AIs try and keep a few units alive after an attack The code that allows it to reinforce its units soon builds them back up to full strenght.

Some AIs try and keep 3 alive, but these are defensive in nature and withdraw whilst their stop attack rating is in positive figures. This is how my setup files differ from one to the other to create a unique personality.

Just messing with those along doesnt make a personality, but it influences how it responds to combat a lot. Remember if its not losing all its units its army size just grows and grows and grows until its max percentage is reached.

Giskard

Edited by giskard, 23 February 2005 - 07:43 PM.


#26 LarkinVB

LarkinVB

    title available

  • Members
  • 1,488 posts

Posted 23 February 2005 - 08:20 PM

Actually the way it works in the game is the AI builds a new unit every 30 seconds and doesnt dilly dally around for a minute before it decides what to do next.

So assuming everything it wants is available, it can have 10 units ready in 5 minutes instead of 5 units. In 10 minutes it has 20 units.


Sorry, you don't understand the code completely. The AI won't build a new unit every 30 secs, it switches between BuildNow() and BuildLater() every 30 secs instead 60 secs. This is a big difference. There is a ratio for using BuildLater().
You switch more often which can result in building squads more often but you are preventing to prepare to build better stuff later.

Edited by LarkinVB, 23 February 2005 - 08:41 PM.


#27 LarkinVB

LarkinVB

    title available

  • Members
  • 1,488 posts

Posted 23 February 2005 - 08:22 PM

Sorry you don't understand the code

The thing is that the AI never reaches its max percentage in the default game. It loses its units too fast to amass and army of a decent size. So making it build 2 units per minute allows it to do that.



max_percentage is nil for harder/insane, its never used/checked at all. harder/insane is default for me and thudos mod.

Edited by LarkinVB, 23 February 2005 - 08:24 PM.


#28 giskard

giskard
  • Members
  • 155 posts

Posted 24 February 2005 - 12:25 AM

Larkin: Your delibrately being arguementative and rude here by trying to force me to explain every point and then ignoring that point when i do explain it.

So forgive me if i give up on you and dont respond with anything you can tear into any more.

BTW

The art of flaming at a high level is to quote another guy in such a way as to try and make him look stupid or make him break some forum rules without actually appearing to break any rules your self.

To do this, you need only ignore any parts of his posts that may be valid and quote back the parts that you can use against that person. Preferably excludiing any parts from the quote that shed light on the true meaning of the text your quoting. Thus misleading the readers who dont read the original text.

So yes, I know what your doing.

To me you sound like a 15 year old noob desprately trying to force his way on everybody. The threats to leave, the tantrums over turrets. The lippy nature of your posts when somebody posts an idea you dont like. The resfusel to even admit other people may like to play the game a different way from you.

In your own Noobish way you have failed to realise your own mistakes.

You see, youve made so many claims and announced so many things you like or dislike. If i wanted to Quote you on say how the Skirmish AI should responds to threats, or Not liking static Build Queues. I could and then I could post quotes where you actually suggest people do those things or say your doing it your self.

So yes, I have noticed.

Unlike you I prefer to talk politely with others and enjoy the sharing of information. I find mod making to be a pleasant experience when I meet people who think the same way such as Thudo does.

To me its not about credit but I always give it where its due because others like to get it. It not about stealing peoples ideas but making better mods and enjoying the process.

If an adult wanted to embarish you using what you wrote, he wouldnt have to make a long post. He would just to say one word.

Not that youd understand because you dont think that much but your word is....

WARP SPIDERS.

Your latest threads show support for what im doing whilst and you think you can get away with it because your posts in here have tried to confuse the issue by mis quoting what im doing in this thread.

Anybody reading my posts only then reading yours will see for them selves your basically copying me on one hand and slagging me off for having the idea on the other.

Lol.

Tell me, how on earth do you expect anybody to take you seriously with an attitude like that ?

BTW if your serious about wanting to lead a team my advice as leader of a team of 20 odd guys over at mechstorm is to take your lead from Thudo. Hes a guy who can lead a team. Your a guy who will find your self teamless in no time with your attitude.

Talking of which:

Thudo: about the player.ai file.

Thanks, i dumped down the insane AI to 1.0 and put all the rest below that and my last ballancing issue with the speed tweak was fixed.

Now all i need is play with the settings a bit to get it just right and my mod will be ready for release. Or rather ready to have all the other difficulty levels setup inline with the new settings so they make sense then released.

Im think 0.8 will be about right for the Hard AI. I left Easy on 3. 0.7 is too Low for Hard in my AI and it wipes the floor with the player on 0.9.

Giskard

Edited by giskard, 24 February 2005 - 12:31 AM.


#29 LarkinVB

LarkinVB

    title available

  • Members
  • 1,488 posts

Posted 24 February 2005 - 06:51 AM

Sorry for being rude.

Btw I led a worldwide team for 2 years and we finally released the game Titans of Steel. Was a bit more than a mod.

#30 giskard

giskard
  • Members
  • 155 posts

Posted 24 February 2005 - 02:02 PM

Ok NP.

I dont mind code talk but i hate it when people get personal or start casting accusations about other peoples abilities.

BTW my modding days started on the Vic20 25 years ago with a game called Blue Meanies. Respawns my own personal modding site and thats been open 5 years in march. It gets about 5 million hits a year from people after something on my site. Though they dont post much unless im activily promoting a mod Im currently making and mysql doent screw up when they update it. Last time that happened it took down my website and forums. Major pain since i had 2 sites to fix.

Mechstorms been open 3 or 4 years and has about 20+ guys under my leadership right now. We have guys from Australia, Argentina, USA, Cannada, Britain and French there.

I founded both sites. Mechstorm was originally part of Respawn but grow too big so i got it its own website and now its bigger than Respawn and has a daily Bandwidth allowance of 16gig per day for its newish download site. Not bad for a site founded to allow a few guys to make maps and game scripts 3 year ago.

Feel Free to check out the sites.

http://www.respawn.co.uk
http://www.mechstorm.net

So as you see, I am no noob either and I do this for fun.

Modding DOW is my escape from those duties which are fast become routine and boring when you do what I do each and every day.

When mod makers get to gether and put personal interests aside and just talk freely about ideas then modding becomes a lot of fun, often more fun than playing the game for me. Mechstorms like that which is why i run it. Ive made a lot of friends that way and Im more comfortable around mod makers than any other group on the net.

I dont challenge them regarding their abilities and if they are noobs and want to try it for them selves I often help them. Im in no way Elitist about my abilities compared to anybody else and I know for fact, it doesnt matter how good i think I am, somebody else out there is always going to be better in some areas.

Which doesnt bother me in the slightest because I enjoy their work as much as they enjoy mine.

Now if you have any suggestions for improvements to the above ideas be glad to hear them. If not then I think this chat has reached its end.

Giskard

Edited by giskard, 24 February 2005 - 02:26 PM.


#31 quiet_man

quiet_man
  • Members
  • 33 posts

Posted 24 February 2005 - 08:46 PM

Sorry for being rude.

Btw I led a worldwide team for 2 years and we finally released the game Titans of Steel. Was a bit more than a mod.

<{POST_SNAPBACK}>


now as people do modding for fun, you should argue a bit more carefull and less direct.

if giskard says "self...var" does not work for him, you should ask him for his test code so you could try to find the error why it is not working, it is not giskards "job" to get it working

there are different ways to point out errors and different ways to lead a team.

I realy wonder why it works for one and not for the other, such big difference has either a very very simple or a very very complicated reason

quiet_man

#32 Guest_Guest_*

Guest_Guest_*
  • Guests

Posted 24 February 2005 - 08:54 PM

I don't understand this

if giskard says "self...var" does not work for him, you should ask him for his test code so you could try to find the error why it is not working, it is not giskards "job" to get it working


Who's "job" is it ? Mine ? I offered my code for him to check for reference.

I already apologized for being rude in stating my points but this is unrelated to the sel.info...var topic.

#33 quiet_man

quiet_man
  • Members
  • 33 posts

Posted 24 February 2005 - 09:47 PM

@Guest = LarkinVB

no, it is not your job
in fact I don't think you are rude but I can also understand giskard
there is no black&white at such things.

quiet_man

#34 Guest_Guest_*

Guest_Guest_*
  • Guests

Posted 24 February 2005 - 10:04 PM

Ooops, I can post as guest ! Yes, its me, Larkin.

#35 giskard

giskard
  • Members
  • 155 posts

Posted 24 February 2005 - 10:25 PM

Thanks for the support Quiet man but larkin is right, its not his job.

And im not on the skirmish team, im more of a freelancer contributor of ideas if you get my meaning.

I just like the way modders pull together to solve problems in certain communitys. When that happens modding is great fun and very interesting indeedy.

BTW i posted a full set of screenshots for you all to look at in another thread. Some feature the new Personalities in action. So you can see what ive been seen. Just remember, no screenshot can tell it all and some can even be misleading. Ive tried not to choose miss leading screenshots but it depends on what you guys see in them to what you think your looking at.

Oh and i let the AI choose a random race in most tests and used 4v4 games in my more recent test so dont be surprised if you see eldar and orks fighting along side each other. :sleep:

giskard

Edited by giskard, 24 February 2005 - 10:26 PM.




Reply to this topic



  


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users