Page 1 of 2

Warking Bots for TDM Stock or Custom maps

Posted: Thu Jul 17, 2003 3:46 am
by WarTech
8-)

Hello everyone, here is a working 99% Server Side Mod for bots that can be add it to stock or custom maps in a TDM game. It needs some work so for any guru please fix whats need it and repost so we all can use it.

Here is why the 99% server side mod. The script will spawn bots in your maps and they will just stand around and not attack anyone unless you get to close then they will bash you. Now to enable them to go off shooting, nading, bashing and moving around without path nodes (which can be add it if need it to) all you need to do is rem out this line >>includes test utils traf holodeck<< from the >>new_generic_human.tik<< and the bots come to life. ONE DRAW BACK when you do this. By editing this file for the server side pk3 you will have to create a small PK3 with the all of the human TIK file in that directory and provide it to the client side otherwise the will see the bots but they will be flashing like no tomorrow. Once the add the pk3 file with the human TIK files the bots become solid again for the client side.

I am currently using this in Spearhead version 2.15 and it works fine. So of course the files will need to be dropped in your MAINTA directory. If some one can figure out how to get around the editing of the >>new_generic_human.tik<< file the it will be a 100% server side mod. Can some one any of you all GURUS help with this!!!!



Here is the working script for mohdm1


// SOUTHERN FRANCE
// ARCHITECTURE: SENN
// SCRIPTING: POWZER

main:
exec global/ai.scr
// set scoreboard messages
setcvar "g_obj_alliedtext1" "Southern France"
setcvar "g_obj_alliedtext2" ""
setcvar "g_obj_alliedtext3" ""
setcvar "g_obj_axistext1" "Modified by"
setcvar "g_obj_axistext2" "<TWZ>WarTech"
setcvar "g_obj_axistext3" ""

setcvar "g_scoreboardpic" "mohdm1"




// call additional stuff for playing this map round based is needed
if(level.roundbased)
thread roundbasedthread

level waitTill prespawn

//*** Precache Dm Stuff
exec global/DMprecache.scr

thread soldier1



level.script = maps/dm/mohdm1.scr
exec global/ambient.scr mohdm1

//exec global/ambient.scr mohdm2

//$world farplane 5000
//$world farplane_color (.333 .333 .329)


level waittill spawn
$world farclipoverride -1

end


//-----------------------------------------------------------------------------


soldier1:
local.soldiercount1 = 1
spawn human/german_winter_type2 "targetname" "soldier1"
thread soldier $soldier1 local.soldiercount1
while (isalive $soldier1)
{
wait 3
}
//remove $soldier1
wait 3
goto soldier2
end

//-----------------------------------------------------------------------------

soldier2:
local.soldiercount2 = 2
spawn human/german_elite_sentry "targetname" "soldier2"
thread soldier $soldier2 local.soldiercount2
while (isalive $soldier2)
{
wait 3
}
//remove $soldier2
wait 3
goto soldier3
end

//-----------------------------------------------------------------------------

soldier3:
local.soldiercount3 = 3
spawn human/german_hund_hundpatrol "targetname" "soldier3"
thread soldier $soldier3 local.soldiercount3
while (isalive $soldier3)
{
wait 3
}
//remove $soldier3
wait 3
goto soldier4
end

//-----------------------------------------------------------------------------

soldier4:
local.soldiercount4 = 4
spawn human/german_panzer_grenadier "targetname" "soldier4"
thread soldier $soldier4 local.soldiercount4
while (isalive $soldier4)
{
wait 3
}
//remove $soldier4
wait 3
goto soldier5
end

//-----------------------------------------------------------------------------

soldier5:
local.soldiercount5 = 5
spawn human/german_misc_worker "targetname" "soldier5"
thread soldier $soldier5 local.soldiercount5
while (isalive $soldier5)
{
wait 3
}
//remove $soldier5
wait 3
goto soldier6
end

//-----------------------------------------------------------------------------

soldier6:
local.soldiercount6 = 6
spawn human/german_kreigsmarine "targetname" "soldier6"
thread soldier $soldier6 local.soldiercount6
while (isalive $soldier6)
{
wait 3
}
//remove $soldier6
wait 3
goto soldier7
end

//-----------------------------------------------------------------------------

soldier7:
local.soldiercount7 = 7
spawn human/german_afrika_NCO "targetname" "soldier7"
thread soldier $soldier7 local.soldiercount7
while (isalive $soldier7)
{
wait 3
}
//remove $soldier7
wait 3
goto soldier8
end

//-----------------------------------------------------------------------------

soldier8:
local.soldiercount8 = 8
spawn human/german_elite_gestapo "targetname" "soldier8"
thread soldier $soldier8 local.soldiercount8
while (isalive $soldier8)
{
wait 3
}
//remove $soldier8
wait 3
goto soldier1
end

//-----------------------------------------------------------------------------

soldier local.crazysoldier local.soldiercount:

if (local.soldiercount == 1)
{
local.crazysoldier.origin = ( -435 1170 466 )
local.crazysoldier.angles = (0 -45 0)
}
else
{
if (local.soldiercount == 2)
{
local.crazysoldier.origin = ( 1585 831 1610 )
local.crazysoldier.angles = (0 0 0)
}
else
{
if (local.soldiercount == 3)
{
local.crazysoldier.origin = ( 880 2838 466 )
local.crazysoldier.angles = (0 -127 0)
}
else
{
if (local.soldiercount == 4)
{
local.crazysoldier.origin = ( -821 2352 466 )
local.crazysoldier.angles = (0 -2 0)
}
else
{
if (local.soldiercount == 5)
{
local.crazysoldier.origin = ( 235 1937 689 )
local.crazysoldier.angles = (0 174 0)
}
else
{
if (local.soldiercount == 6)
{
local.crazysoldier.origin = ( -494 380 467 )
local.crazysoldier.angles = (0 -29 0)
}
else
{
if (local.soldiercount == 7)
{
local.crazysoldier.origin = ( -918 -298 130 )
local.crazysoldier.angles = (0 -8 0)
}
else
{
if (local.soldiercount == 8)
{
local.crazysoldier.origin = ( -176 -643 98 )
local.crazysoldier.angles = (0 34 0)
} // end soldiercount 8
} // end soldiercount7
} // end soldiercount 6
} // end soldiercount 5
} // end soldiercount 4
} // end soldiercount 3
} // end soldiercount 2
} // end soldiercount 1


local.crazysoldier.testanim = idle
local.crazysoldier.mindist = 128
local.crazysoldier.maxdist = 2000
local.crazysoldier.leash = 10000
local.crazysoldier forceactivate
local.crazysoldier.health = 100
local.crazysoldier.sound_awareness = 100
local.crazysoldier.noticescale = 50
local.crazysoldier.fov = 180
local.crazysoldier.hearing = 1600
local.crazysoldier.accuracy = 100f
local.crazysoldier.sight = 4000
local.crazysoldier.weaponnum = 6
if (level.crazysoldier == 1)
local.crazysoldier.health += 25


while (isalive local.crazysoldier)
{
if (local.crazysoldier.enemy == NULL)
{
wait 1
}
else
{
local.crazysoldier exec anim/attack.scr
if (vector_length (local.crazysoldier.origin - local.crazysoldier.enemy.origin) < 100)
{
local.crazysoldier exec anim/default_inithandler.scr local.crazysoldier.enemy
}
wait 1
}
}

end

roundbasedthread:

// Can specify different scoreboard messages for round based games here.

level waitTill prespawn

level waittill spawn

// set the parameters for this round based match
level.dmrespawning = 0 // 1 or 0
level.dmroundlimit = 5 // round time limit in minutes
level.clockside = kills // set to axis, allies, kills, or draw

level waittill roundstart

end


Now go to work GURUS This one is ready for testing on a dedicated server. :twisted:

Posted: Thu Jul 17, 2003 5:53 am
by jv_map
Nice one semi-guru :P

Bots

Posted: Thu Jul 17, 2003 10:51 am
by WarTech
jv_map wrote:Nice one semi-guru :P
:shock:

Wow. Thanks for the semi-guru. LOL. But I am a complete idiot when it comes down to this scripting crap. I just have one to many ideas.

Now I was reading all over 1 billion forums and saw that the bots (AI) currently work in obj-tow game without clients needing to download any additional PK3 files to make them animated. So I looked at the abj-tow maps script. The only thing that I see in there thats calling the animation for the AIs is this script >>>>tow_dm.scr<<<< located in everyones global directory. So if any Guru can take a look whats calling it the animation from that script, then I say MAYBE the script can go full blown SERVER SIDE MOD. All of the OJB-Tow maps have this right under the

MAIN:


exec global/ai.scr
exec global/friendly.scr
exec global/tow_dm.scr

Any guru with willing to pull it off,,there is your tickett. LOL.

An Idea!!!

Posted: Thu Jul 17, 2003 3:13 pm
by WarTech
jv_map wrote:Nice one semi-guru :P
JV_map, I read over your explanation on how to get AI scripted in a SP map under the tutorial you have posted. Using that information you have about the INCLUDE. Is there any way to call the necessary animation by using the INCLUDE line and just add whats need it for each character within the example script posted here for the Server Side Mod? Or even just create a separate script say My_animation and have it exec by the script to call the animations? Whats your take on this?


Bellow is the tutorial for ref. matetial:

Single player maps without 'test_' :: Jv_map
-------------------------------------------------------------------------------

Most mappers will have noticed that when creating a single player map, they have to prefix 'test' to their map name to get the sounds and AI to work. There are however disadvantages of prefixing 'test'. If you do this, the game will load all sounds and all animation files when loading your map. This results in a long loading time and memory abuse during the game. A better way is described in this tutorial, but it's also more work. To get the sounds fixed please refer to one of my previous tutorials, Ubersound Work-Around. The tutorial you're currently reading is about how to get the AI to work.

-------------------------------------------------------------------------------
Animation Files
-------------------------------------------------------------------------------


In most single player maps the AI won't work because it cannot find the necessary animation files. MoHAA uses so-called aliases to refer to animation files. Animation aliases are defined in the TIKI files of all enemies. Every enemy has a specific TIKI file in the models/human folder of pak0.pk3. This TIKI file contains information about the 3D model of the enemy, the skin applied, the equipment he carries and the animation aliases that can be applied on this enemy. At the end of every German TIKI file, you'll find the line:


$include models/human/animation/dialogue/
generic_dialogue_german.tik

This line loads all dialogue animations that German soldiers use when attacking. These are not animations like shooting, but mostly head and lip animations when saying things. At the end of American TIKIs, you'll find:


$include models/human/animation/dialogue/generic_
dialogue_US.tik

This loads American conversations. At the end of every AI TIKI you'll find:


$include models/human/new_generic_human.tik

This is the line that loads running, shooting and all other animations and that's causing the problems. See the small section of the new_generic_human file below:

includes test utils
{


// NPC weapon animations
$include models/human/animation/human_grenade.tik
(...)
$include models/human/animation/human_unarmed.tik

// Level-specific scripted animations
$include models/human/animation/scripted/
level_m1l1.tik
$include models/human/animation/scripted/
level_m1l2.tik
$include models/human/animation/scripted/
level_m2l1.tik
$include models/human/animation/scripted/
level_m3l1.tik
$include models/human/animation/scripted/
level_m4l3.tik
$include models/human/animation/scripted/
level_m5l3.tik

// More scripted animations
$include models/human/animation/scripted/dead_poses.tik
(...)
$include models/human/animation/scripted/welding.tik

}


//-------------------------------------
// Mission 1
//-------------------------------------
// Intro, fight through town, ambush (Mackey)
includes m1l1
{


$include models/human/animation/human_grenade.tik
$include models/human/animation/human_pistol.tik
$include models/human/animation/human_thompson.tik
$include models/human/animation/human_rifle.tik
$include models/human/animation/human_mp40.tik
$include models/human/animation/human_bazooka.tik
$include models/human/animation/human_mg42.tik
$include models/human/animation/human_unarmed.tik

// Level-specific scripted animations
$include models/human/animation/scripted/
level_m1l1.tik

// More scripted animations
$include models/human/animation/scripted/balcony.tik
$include models/human/animation/scripted/
opeltruck.tik

}



The 'includes' means: "does the file name of the map include this set of characters?". Thus, if your map name includes 'test', the TIKIs between the { and the } will be loaded. These TIKIs contain the animation aliases. The developers of MoHAA have made a separate section for every level which loads the necessary TIKIs. This prevents that too many animations are loaded for a mission. So if you want to load exactly the right number of animations for your level, you'll have to work around this file.

-------------------------------------------------------------------------------
Working around the new_generic_human.tik
-------------------------------------------------------------------------------


The only way to work around this file is to alter the TIKIs for AI soldiers. As these are original MoHAA files, that's not a good idea. So just create your own enemies. Find an enemy in MOHRadiant that you like and look for the corresponding TIKI in pak0.pk3, for example 'models/human/german_panzer_
grenadier.tik' for the ai->german->panzer->grenadier enemy. Extract the TIKI file and open it with a text editor. Copy everything and paste it into an empty text file. Now change the line


$include models/human/new_generic_human.tik (line 147)

into


$include models/human/mymapname_generic_human.tik

and replace these lines


/*QUAKED ai_german_panzer_grenadier (1.0 0.5 0.0) (-16 -16 0) (16 16 92)
*/

with these


/*QUAKED ai_mymapname_german_panzer_grenadier (1.0 0.5 0.0) (-16 -16 0) (16 16 92)
*/

This will make your new enemy appear in MOHRadiant in the popup menu under 'ai-> mymapname -> german -> panzer -> grenadier'. Save the file as 'mymapname_enemyname.tik' in the models/human directory, for example 'models/human/
mywonderfulmap_german_panzer_grenadier'. Now extract the new_generic_human.tik file from pak0.pk3 and remove everything between


$include models/human/animation/scripted/balcony.tik (line 16)

and


animations // Now list all... (line 654)

Then add in that location the animations you need. Choose from the following TIKIs:

// NPC weapon animations
$include models/human/animation/human_grenade.tik
$include models/human/animation/human_bar.tik
$include models/human/animation/human_thompson.tik
$include models/human/animation/human_pistol.tik
$include models/human/animation/human_mp44.tik
$include models/human/animation/human_rifle.tik
$include models/human/animation/human_mp40.tik
$include models/human/animation/human_bazooka.tik
$include models/human/animation/human_mg42.tik
$include models/human/animation/human_unarmed.tik

// Level-specific scripted animations
$include models/human/animation/scripted/level_m1l1.tik
$include models/human/animation/scripted/level_m1l2.tik
$include models/human/animation/scripted/level_m2l1.tik
$include models/human/animation/scripted/level_m3l1.tik
$include models/human/animation/scripted/level_m4l3.tik
$include models/human/animation/scripted/level_m5l3.tik

// More scripted animations
$include models/human/animation/scripted/dead_poses.tik
$include models/human/animation/scripted/fallen.tik
$include models/human/animation/scripted/crate_carry.tik
$include models/human/animation/scripted/hiding_cabinet.tik
$include models/human/animation/scripted/interrogation.tik
$include models/human/animation/scripted/jeep.tik
$include models/human/animation/scripted/scientist.tik
$include models/human/animation/scripted/set_explosive.tik
$include models/human/animation/scripted/table.tik
$include models/human/animation/scripted/throw_helmet.tik
$include models/human/animation/scripted/flak88_animation.tik
$include models/human/animation/scripted/prisoners.tik
$include models/human/animation/scripted/lean.tik
$include models/human/animation/scripted/pilot_capture.tik
$include models/human/animation/scripted/wallclimb.tik
$include models/human/animation/scripted/sleep.tik
$include models/human/animation/scripted/opeltruck.tik
$include models/human/animation/scripted/vent.tik
$include models/human/animation/scripted/alarm.tik
$include models/human/animation/scripted/tank.tik
$include models/human/animation/scripted/workers.tik
$include models/human/animation/scripted/welding.tik


If you're constructing a basic map, you'll only need the NPC weapon animations for the weapons the AI can use in the map. You only need the scripted animations if you use them in your script. When you've added all necessary TIKIs, save the file as 'models/human/mymapname_generic_human.tik'. Now just add your new enemy to your map (in the 'ai->mymapname' menu) and compile it. If you don't want to have the AI talking by script commands, you're ready now. Otherwise, keep on reading.

-------------------------------------------------------------------------------
Dialogue Animations
-------------------------------------------------------------------------------


When you've done everything above, it's time to fix the dialogue animations. All humans in MoHAA need an animation alias for everything they say. So if you're working on an US soldier, extract the file models/human/animation/dialogue/generic_dialogue_US.tik, if you're adding a German AI extract the file generic_dialogue_german.tik from the same directory of pak0.pk3. Open the file and remove everything above the line:


// REAL GENERIC US FILES (line 64, for US dialogue)
// REAL GENERIC GERMAN FILES (line 29, for German dialogue)

Now you can add the TIKIs you need for your dialogue animations on top of this file. The following TIKIs are available:

// for US soldiers:
$include models/human/animation/dialogue/M1L1_dialogue_US.tik
$include models/human/animation/dialogue/M1L2_dialogue_US.tik
$include models/human/animation/dialogue/M1L3_dialogue_US.tik
$include models/human/animation/dialogue/M2L1_dialogue_US.tik
$include models/human/animation/dialogue/M3L1_dialogue_US.tik
$include models/human/animation/dialogue/M3L2_dialogue_US.tik
$include models/human/animation/dialogue/M3L3_dialogue_US.tik
$include models/human/animation/dialogue/M4L1_dialogue_US.tik
$include models/human/animation/dialogue/M4L3_dialogue_US.tik
$include models/human/animation/dialogue/M5L1_dialogue_US.tik
$include models/human/animation/dialogue/M5L3_dialogue_US.tik
$include models/human/animation/dialogue/M6L3_dialogue_US.tik

// for German soldiers:
$include models/human/animation/dialogue/M1L1_dialogue_
german.tik
$include models/human/animation/dialogue/M2L2_dialogue_
german.tik
$include models/human/animation/dialogue/M3L1_dialogue_
german.tik
$include models/human/animation/dialogue/M6L1_dialogue_
german.tik
$include models/human/animation/dialogue/M6L3_dialogue_
german.tik


If you open any of these TIKIs you can see exactly what aliases are available and thus what 'say' commands you can use in your script. You can also make your own dialogue TIKI. To do this, just copy aliases from any of the files above and put them in your own TIKI. Aliases look like the following:

dfr_M1L1_add05 ACTOR_m1l1_add05.skc
{
client /// Powell, check the door
{
first sound dfr_M1L1_add05
}
}

The bold text is the alias to use in a say command, for example:


$sergeant say dfr_M1L1_add05

The text in italics is the name of the sound alias used. It doesn't necessarily have the same name as the animation alias. When you've copied the aliases you need to your custom dialogue TIKI, save it using a filename that contains your map name, for example 'models/human/animation/dialogue/mywonderfulmap_dialogue_
US.tik'. Also add an include line in the generic_dialogue file. Anyway, when you're done, save the generic_dialogue_US file as 'models/human/animation/dialogue/mymapname_generic_
dialogue_US.tik' and the German dialogue file as 'mymapname_
generic_dialogue_german.tik' in the same folder. Now the last thing you have to do, is to include your new dialogue file in your AI TIKI. So replace this line

$include models/human/animation/dialogue/
generic_dialogue_US.tik

with this one


$include models/human/animation/dialogue/
mymapname_generic_dialogue_US.tik

or this line


$include models/human/animation/dialogue/
generic_dialogue_german.tik

with this

$include models/human/animation/dialogue/
mymapname_generic_dialogue_german.tik


If you've done all this, you're ready and you can use 'say' commands in your script and add custom sounds.
Final Notes


I hope this tutorial has increased your understanding about animations in single player levels. If you have any problems, you can either contact me or post at the forums


Need any help : Ask in the Forum

Posted: Thu Jul 17, 2003 6:22 pm
by WarTech
jv_map wrote:Nice one semi-guru :P
YO jv_map or anyone MEGA GURU. Can the loadout.scr be use to load up all the necessary stuff to make to bots work as server side.

example how they using it for the single player it self

EXAMPLE:

exec global/ai.scr
exec global/loadout.scr maps/m4l0.scr

Posted: Thu Jul 17, 2003 9:45 pm
by Alcoholic
i think what loadout does is get all all your weapons and ammunition and your health from the previous map, and ports it to the next level.

Posted: Fri Jul 18, 2003 2:40 pm
by WarTech
Alcoholic wrote:i think what loadout does is get all all your weapons and ammunition and your health from the previous map, and ports it to the next level.
Alcoholic:

The information you provide about the new_generic_human.tik did not worked. However, it is the file that keeps them from working correctly. I tested and tested untill I narrowed it down to and edited the test line and they worked fine. I till have the problem with the bots flickering at the clients side. Which I am incline to think that it could be a conflict with one of the tik in the models/human directory. I'll be testing that theory today and if what think and can correct it then the mod will be a full 100% server side. Next step will be start scripting in some info_path to make them walk from point A to B.

I was able to correct this error message:

^~^~^ Animation 'newanim/models/human/animation/scripted/level_m1l1/truck_twitch_guy01.skc' has duplicate channel 'Base head01 pos'
^~^~^ Animation 'newanim/models/human/animation/scripted/level_m1l1/truck_twitch_guy01.skc' has duplicate channel 'Base head01 pos'
^~^~^ Animation 'newanim/models/human/animation/scripted/level_m1l1/truck_twitch_guy01.skc' has duplicate channel 'Base head01 pos'

by editing this line:

from: $include models/human/animation/scripted/level_m1l1.tik

to: //$include models/human/animation/scripted/level_m1l1.tik

Cya around with the next update. Any ideas on this please keep me post it on it.

PS:

My apologies JV_Map. I ll keep that in mind.

scriptmaster

Posted: Fri Jul 18, 2003 3:15 pm
by tltrude
Have you seen jv-map's new ubersound workaround? Maybe that "Scriptmaster" thing can be used to cache the models.

You can find it in: C:\Program Files\MOHAATools\docs\g_allclasses.html . At least, that is the path to mine.

Re: scriptmaster

Posted: Fri Jul 18, 2003 4:42 pm
by WarTech
tltrude wrote:Have you seen jv-map's new ubersound workaround? Maybe that "Scriptmaster" thing can be used to cache the models.

You can find it in: C:\Program Files\MOHAATools\docs\g_allclasses.html . At least, that is the path to mine.
Looking at it and wow LOOK AT THIS: :twisted:
===============================================

ScriptMaster -> Listener -> Class
alias( String alias, String realPath, [ String arg1 ], [ String arg2 ], [ String arg3 ], [ String arg4 ], [ String arg5 ], [ String arg6 ] )


Create an alias to the specified path
aliascache( String alias, String realPath, [ String arg1 ], [ String arg2 ], [ String arg3 ], [ String arg4 ], [ String arg5 ], [ String arg6 ] )


Create an alias to the specified path and cache the resource
cache( String resourceName )


pre-cache the given resource

==============================================
It looks like the cashe and pre-cache may doo the trick. Dang one more thing to test. LOL :(

Re: scriptmaster

Posted: Fri Jul 18, 2003 11:32 pm
by WarTech
tltrude wrote:Have you seen jv-map's new ubersound workaround? Maybe that "Scriptmaster" thing can be used to cache the models.

You can find it in: C:\Program Files\MOHAATools\docs\g_allclasses.html . At least, that is the path to mine.
I try using it but to no avail. So far everything works server side but my bot is in a constant flickering. What I dont understand the bots work fine and perfect in Obj/mp_flughafen_dm without doing all the tinkering with the tik files. But if you use the same scritp in any othere map the either dont move at all unless I tinker with the TIK files but then the flickering starts. So what is the obj-tow type maps calling or loading that allows the bots to be work correctly as a server side mod. I am brain dead, cant figure out this one. Any clue? any thing? any!! :(

Posted: Sat Jul 19, 2003 12:14 am
by Alcoholic
remember you cant spawn info_pathnodes because the game creates a connection grid between them on level load, and if you spawn one during the game, the game will crash.

Posted: Sat Jul 19, 2003 12:45 am
by WarTech
Alcoholic wrote:remember you cant spawn info_pathnodes because the game creates a connection grid between them on level load, and if you spawn one during the game, the game will crash.
Thanks for all the information. Got your PM and will check that site for scripting basics. I am going crazy with my project. Bots work but they flicker. How can I make them solid and keep them working? I cant figure out what is that the TOW maps load that makes the work with the TIK tinkering. BTW I am in TEXAS. Any thing you can tell me on this its the only thing that stoping it from being a complete server side mod. The only way i can stop it right now is by sending all the TIK files in a PK3 format to all clients. I am trying to get around that. There is got to be a way to invoke all the same files within the client side. Some server side command could this do it? cache models/human/*.tik or something that would make it happend?

Posted: Sat Jul 19, 2003 2:16 am
by Alcoholic
in whatever your script is that makes the bots, you can type cache models/human/blah.tik

Posted: Mon Jul 21, 2003 2:03 pm
by mike@catch22
come on come on....the suspence is killing me :lol:

Posted: Mon Jul 21, 2003 3:54 pm
by WarTech
Alcoholic wrote:in whatever your script is that makes the bots, you can type cache models/human/blah.tik
Do you mean cache all the models used fo the script? If so I did that too in a precache.scr for the map and did not work. I feel like I am real close.