A Community discussion forum for Halo Custom Edition, Halo 2 Vista, Portal and Halo Machinima

Home  Search Register  Login Member ListRecent Posts
»Forums Index »Halo Custom Edition (Bungie/Gearbox) »Halo CE Technical / Map Design »Assorted Tutorials concerning AI, HUD, scripting, and others

Author Topic: Assorted Tutorials concerning AI, HUD, scripting, and others (27 messages, Page 1 of 1)
Moderators: Dennis

Joined: Jun 12, 2008

Steam: gamma927

Posted: Jan 17, 2012 06:23 PM    Msg. 1 of 27       
So I was digging through my hard drive yesterday and I found a number of txt files. Intrigued, I --- ah never mind. Here are a number of tutorials collected throughout my years here. The majority are my posts, with a few exceptions that have credit clearly labelled. I want to see if I can make this a comprehensive help thread; feel free to post additional tutorials as replies and I will edit them into the main post.

Topics covered:
AI allegiance tutorial
AI following tutorial (re-interpretation of Me KS's tutorial)
AI movement tutorial (use instead of command lists or move positions)
AI tutorial (comprehensive coverage of the actor_variant file)
3rd person Animation Tweaking to allow a unit to hold a new weapon (a marine with a rocket launcher, for instance)
Compiling a map tutorial with tool from the command prompt
Compiling custom bitmaps
Custom animation tutorial (the scripting command)
Detecting Host
Adding additional vehicles and having them sync
HUD cinematic titles tutorial
Another HUD cinematic title tutorial
HUD message text tutorial
Another HUD message text tutorial
HUD strings and pickup icons tutorial
Importing BSPs into 3DS Max
Make WordArt scenery
Nav points tutorial
Adding netgame equipment (aka, adding weapons and equipment for multiplayer maps)
Headers for scripts
Timer tutorial (originally for a firefight, might not make sense)
Full firefight-making tutorial!

And here they are:

AI Allegiance Tutorial
By: Gamma927

Before you can understand what an allegiance does, you must learn what a team is. The team of an unit or an AI encounter is the team that the unit / encounter is affiliated with. For example, the player is always on team 1: player, and it is common practice to set marines to team 2: human and covenant to team 3: covenant. Note that this is for single player only; in multiplayer, red team is team 0 and blue team is team 1.

Now, in single player, you'll often times have enemy teams. If you choose to make certain teams band together and help each other, you use the ai_allegiance command. The player and the human teams are NOT automatically allied; in order to create an allegiance between the two teams, you must script it separately. Example:

(ai_allegiance player human)

This will create a bond between the player and human teams, with both cooperating as per the campaign. It will also inherit the trait in that if the player betrays the human teams (teamkilling marines as I'm sure many of you have done :V), the allegiance will break, and the marines will become the player's enemies (I'm sure you've also witnessed this).

In addition to creating allegiances, you can also break allegiances. For instance, if you have sentinel allies and an allegiance between the player team and the sentinels team, and you choose to break their allegiance as per the campaign, you can use the ai_allegiance_remove command. The syntax is similar to the allegiance command. Example:

(ai_allegiance_remove player sentinel)

This will effectively break the bond between the two teams.

AI Following Tutorial
Original by: Me KS
Reinterpretation by: Gamma927

1) Create an AI encounter, and set up firing positions in groups (how?)
a) Before I proceed, I'll explain what I mean by "groups". Each group is an area where the AI would fight in given the player's proximity. For instance, if you have a series of rooms, and you make each room have a separate group of firing positions, the AI would fight in each room. Let's say the player's in room 1. Thus, the AI would only use the firing positions within room 1. When the player moves to room 2, the AI will use the firing positions in room 2. If you don't understand this, that's not too much of a problem. Just put firing positions down in groups. How?
b) To put firing positions down in groups, in the properties pane, there will be a dropdown box to specify a certain letter. Each letter represents a certain group. If you place half the firing positions down with A (red), and half with B (blue), then they'll choose between groups whenever convenient. Remember to keep the A firing positions grouped together, and the B firing positions in a separate group.

2) Create one squad (only one). Specify the actor variant, the difficulty, etc. Check automatic migration.
3) Create a new squad. For this squad, do NOT specify the actor variant or difficulty. Instead, the only things you do are to check automatic migration and follow the directions below.
4) In the attacking, defending boxes, put in the letter of a firing position group (for example, A for firing position group A)
5) Repeat for all firing position groups.
6) Use the ai_follow_target_players command in a script.

That should be it.

AI Movement Tutorial Using Firing Positions
By: Gamma927

For AI walking on a set path:


These are the generic crappy methods that people've used over the past few years. Here's what you DO use:

Place firing positions in the general area you wish the AI to go to. Add some firing positions around the path to that area.

In each AI squad, set the initial and return states to "guarding at guard position"

Create a script, for which every AI encounter can magically see the enemy that it's trying to attack. For instance, if the two AI encounters you want to fight together are redteam and blueteam, you'd use this script:

(script continuous visionscript
(ai_magically_see_encounter redteam blueteam)
(ai_magically_see_encounter blueteam redteam)

If you don't know how to create a script, just copy what I typed into a new Notepad file. Replace redteam and blueteam with the names of the AI encounters you want to fight. Then, click File > Save As (in notepad), and set the dropdown box to "All files". Save the file as script.hsc.

Then, move the script.hsc file into the reciprocal of the tags folder, in the data folder. For example, if your scenario is located inside tags\levels\test\death_island\warisland.scenario, then put your script.hsc file inside: data\levels\test\death_island\scripts\script.hsc. The scripts folder will not initially be there; you must create it yourself.

Once in, in Sapien, go to File > Compile scripts (or something like that). Alternatively, you can use the keyboard shortcut ctrl + shift + c.

Sapien should then display scripts compiled successfully. Save the scenario, and compile it in tool.

AI Actor Variant Tutorial
By: Gamma927

File > New > Actor Variant.

Starting from the top...

Actor Definition: Direct this to the .actor tag that you wish to use. The .actor tag contributes a lot towards the way the AI acts. For example, the maximum distance that the AI can see is specified in the .actor tag, as well as guarding parameters, duck behind cover chance, etc.

Unit: Set the type of unit. Don't forget to browse to the unit itself. This is the biped that you will use.

Major Variant: This is the actor variant that contains the major variant. For example, in grunt minors, the grunt major variant is specified here.

Movement Switching: Essentially specifies whether the AI just runs, or crouches and runs.

Weapon: The weapon that the AI uses. Self explanatory.

Maximum Firing Distance: The maximum distance that the AI can shoot at. For assault rifles, I average around 8. For battle rifles and marksman rifles, I use around 16. For sniper rifles, I go for 40 or so.

Rate of fire: How fast you want the weapon to fire. If you want the AI to fire fully automatic, leave it at 0. If you want to fire semi-auto, one round every 2 seconds, you'll do a little math. One round every 2 seconds is 0.5 rounds per second, so you would use 0.5 here.

Projectile Error: How accurate you want the AI to be.

Gonna skip the next three because I never touch them. You can copy the values from another AI.

Death Fire Wildly Chance: The chance of firing randomly when the actor dies.

Death Fire Wildly Time: The time you spend firing wildly after you die. Firing wildly isn't necessary, but it's a nice touch for flood and grunts when they die. More of an aesthetic feel than one of a gameplay changing feel.

Desired Combat Range: This is a biggy. This sets how close the AI goes towards its target to fire. For sniper rifle AI, you want to stay far away. The end value also should be less than the maximum firing distance, so that it doesn't try to stay further away than it can. So for a sniper rifle AI, I'd normally leave it to pretty long ranged; around 30 - 40. For assault rifle AI, I keep it tight; 5 - 8. For shotgun AI, they're most effective at close range, so you'd leave it at 2 - 5. Note that the AI will TRY to get within this range, but if the maximum firing distance is greater than the end, it will fire at you if it isn't capable of entering this range.

The next two are aesthetic modifiers, to set the gun offset. I'm not going to dabble into this.

Target Tracking: On a scale of 0 to 1, it sets how well the AI tracks its target.

Target Leading: On a scale of 0 to 1, it sets how well the AI leads its target. Please don't set target tracking and target leading to 1, and be like "z0mg mai AI r so l33t cuz they r raep teh enemiz 10/10 tiemz".

Weapon Damage Modifier: Sets how effective the damage is with the certain weapon when the AI is using it. For example, if you have a rocket launcher AI, and you set the thing to 0.01, it'd only do 0.001 of the damage of a rocket launcher, which is around 300. So, you'd only take 3 damage from a direct hit, instead of 300.

Damage per second: Leave it at 0 to use the weapon's default. This is basically how much damage the AI does with the weapon towards its target per second.

For most of Burst Geometry, I'm only going to cover the important parts. Not enough time to go indepth.

Burst Duration: How long each burst lasts. So if you have a machine gunner AI, who fires for ten seconds at a time, set it to 10. If you have a pistol crewman, who fires one shot every few seconds, set it to that fraction of time.

Burst Separation: How long the AI waits between each burst.

Special Damage Modifier: A damage modifier for the special case firing. We'll go into this later.

Firing Patterns should be self explanatory. Overall, it just modifies your firing length and speed when berserking, moving, and acquiring a new target.

Special Case Firing Properties: This is a biggy.

Special Fire Mode:
Overcharge: This is for weapons that are capable of charging (Plasma Pistol, Spartan Laser).
Secondary Trigger: This is for weapons with a secondary trigger (Assault Rifle with Grenade Launcher, Battle Rifle with Masterkey Shotgun).

Special Fire Situation:
Enemy Visible: When the AI sees an enemy
Enemy Out Of Sight: When the enemy takes cover, or is hiding
Strafing: When the enemy is in sight, and moving back and forth. Like those noobs in bloodgulch.

Special Fire Chance: The chance of using the special fire property.

Special Fire Delay: How long you must wait before using the special fire again.

Berserking and Meleeing should be self explanatory. Berserking is basically when the AI goes crazy, like when elites pause firing to roar at you.

Grenades: Most of the grenade parameters are self explanatory. I'll cover the important ones.

Grenade Velocity: This number must be a positive whole number in order to get the AI to throw. When you extract an actor variant, this normally isn't a positive whole number. You'd use around 9 to 10 for marines and grunts, and around 12 for elites.

Grenade Ranges: Similar to Desired Combat Range

Collateral Damage Radius: The AI won't throw the grenade if there's a friendly unit within this distance of the planned grenade throw.

Grenade Chance: How likely the AI are to throw grenades.

Grenade Check Time: How often the AI check whether or not to throw grenades.

Encounter Grenade Timeout: How often the AI must wait between grenade throws. This goes for all actors in an encounter. So if (list_get (ai_actors encounter) 0) throws a grenade, (list_get (ai_actors encounter) 1) cannot throw a grenade until the timer has gone up.

Items: Basically the stuff the AI drops when he dies.

Equipment: Not necessary, leave blank if you don't want him to drop anything. Otherwise, specify the equipment that you wish the AI to drop (health packs, overshields).

Grenade Count: Number of grenades that the AI drops when he dies.

Don't drop grenades chance: How likely the AI is to NOT drop a grenade when he dies.

Drop weapon loaded: Fraction of the ammo loaded into the weapon that the AI drops. So if you had 0.2 - 0.4 for a MA5B Assault Rifle, which has a clip of 60, he'd drop the weapon with 12 - 24 rounds loaded.

Drop weapon ammo: This is the amount of ammo stored in the weapon. This doesn't use a fraction system; rather, it uses an actual ammo count.

The last few values should be self explanatory / unnecessary.

Change Colors: This is for variants with color changes. If you set it to pink, for example, for a spartan AI using the multiplayer spartan biped, the AI would be pink.

3rd Person Animation Tweaking Tutorial
By: Gamma927

You have a model_animations file, but the file itself is missing cases for each weapon. It's an easy tweak.

1) Open the .model_animations file
2) Under unit, select stand
3) Scroll down to weapons. In this example, I'm using the marine model animations, and the first item here is rifle. This is the 3rd person rifle animation. Now, assuming you want your biped to hold a rifle, you would leave this at rifle. Otherwise, you'd browse to pistol for a pistol animation, and so forth
4) Scroll down to weapon types
5) Here, you will see a 2 or 3 letter string. In the marine, the default under rifle is ar. This is the assault rifle animation. Now, open the weapon you want the biped to hold and scroll down until you find the weapon label. Go back to the marine model animations and weapon types, and click duplicate. Rename the string in the duplicate to the weapon label you just found
6) Save

You're done

Compiling A Map Using Tool
By: Gamma927

You'll have to launch a command prompt (cmd.exe). If you're on Windows Vista or Windows 7, type into the start menu's search bar "cmd.exe" without the quotations. If you're on XP, click run and type in cmd.exe. It'll bring up a black command prompt. Type:

cd C:\Program Files\Microsoft Games\Halo Custom Edition

or whatever the directory of your install is. If you're on a 64 bit computer, it'll be:

cd C:\Program Files (x86)\Microsoft Games\Halo Custom Edition

If you installed it elsewhere, I'm sure you know how to do this part.

The arrow should change to C:\Program Files\Microsoft Games\Halo Custom Edition> or wherever you redirected it to. Then, type

tool build-cache-file levels\test\tutorial\tutorial

Replace levels\test\tutorial\tutorial with the directory of your .scenario file. If it's in tags\levels\test\tutorial\tutorial.scenario, then you would type what I posted above. Otherwise, it'll be the location of your scenario minus the .scenario and the tags\ folder. Tool will take a bit of time and spit out a bit of output. Wait for it to either display ###FAILED TO WRITE DATA CACHE FILE or successfully compiled cache file (both are self explanatory).

Modifying and Compiling Custom Bitmaps
By: Gamma927

1) Get batch bitmap extractor v 1.0 by FireScythe, not 1.5
2) Extract the weapon .bitmap using the bitmap extractor
3) Open the extracted image in a image editing program. You can find the extracted image in the data folder reciprocal of the tags folder
4) Modify to your heart's delight
5) Save as a .TIF (preferably using a different name so that you don't overwrite the original)
6) Open a command prompt and use the tool command for bitmaps.
To do this, find the folder that the edited tif resides in. Example: data\h3\weapons\single\assault_rifle\bitmaps\diffuse.tif
Remove the data and the name of the tif file (mentally, don't move the file)
Type into tool:
tool bitmaps directory
So using the prior example, it would be:
tool bitmaps h3\weapons\single\assault_rifle\bitmaps

If any of your folders contains a space or multiple spaces, put quotations around the whole directory. Example assuming assault_rifle had a space instead of an underscore
tool bitmaps "h3\weapons\single\assault rifle\bitmaps"

7) The bitmap will be outputted. If you overwrote the original, then just compile a map or look at your bitmap in sapien.
8) If you DIDN'T overwrite the original like a good samaritan, open the .gbxmodel of the biped/weapon/vehicle that you're changing
9) Scroll to the bottom, shaders
10) Scroll through the dropdown list until you find the shader that looks like it contains the bitmap you modified
11) Open the shader, scroll down to the base map
12) Open it and click "Show Bitmaps" to make sure that it's the one you modified
13) Close the bitmap viewer and the bitmap. In the shader, click the three dots and browse to the newly compiled bitmap
14) Save

Custom Animation Tutorial
By: Gamma927

The custom_animation command has four parameters:

(custom_animation [unit] [animation_graph] [string] [boolean])

The unit is self explanatory; the name of the unit you want to play the animation

The animation_graph is the location of the model_animations file that contains the animation you want to play. Since the marine wave animation is located in the marine model_animations file, you would reference characters\marine\marine

The string is the name of the animation you want to play. If you don't know the name, open the model_animations in Guerilla and browse through all the animations in the model_animations. For the marine wave animation, it's: "stand_unarmed_act-wave" (or stand_unarmed_act-wave2, could be either).

For the boolean, set this parameter to true if you wish to fluidly interpolate into an already playing animation. Set this to false if you want the unit to stop everything he / she / it is doing and play the animation.

Using this knowledge, to have a marine play a wave animation, you would do something similar to this:

(custom_animation biped1 "characters\marine\marine" "stand_unarmed_act-wave" true)

Detecting The Host With Scripts
By: Chrisk123999

1. Place a vehicle (warthog works best) in in Sapien in a in-accessible location (preferably a "sync" room). Name it "host_hog". Make sure the vehicle is set NOT to spawn automatically on any gametypes.
2. Make a trigger volume that just barley fits around the vehicle. Name it "host_vol".
3. Make a cutscene camera flag in the room. Name it "host_cam".
4. Use this script:

(global boolean is_host false)(global boolean is_dedicated false)(script startup host_detection;Script by =CE= Chris (if (= (list_count (players) 0 ) 0) (set is_dedicatedtrue) ) (object_pvs_set_camera host_cam) (object_create_anew host_hog) (sleep 30) (if (= (volume_test_object host_vol host_hog) 1) (set is_host true) ))

5. ???
6. Profit!

Adding Additional Types of Vehicles Into Multiplayer
By: Me KS


1. In your "Vehicles" list in Sapien, place a vehicle spawn point in a location where no player can go. Set the spawn point's vehicle type to "NONE" so no vehicle actually spawns there. This spawn point has to be the very first in the list of vehicles in Sapien.

The reason for this is all vehicles that the game considers "extra" are respawned to the first vehicle spawn point, no matter where their actual spawn points are. So we take advantage of that here.

2. Place a trigger volume (Game Data > Trigger Volumes) over this spawn point. Make sure the trigger volume is larger than the largest vehicle that you need a script to respawn. For example, if you have two scorpions, a hog, and a ghost, make the trigger volume at least as large as the scorpion. Name this trigger volume whatever you want.

This will be used to check to see when the vehicle has respawned to the first spawn point, then re-create it that very same moment to bring it back to its true spawn point.

3. Also, place a new vehicle of any type (hog, ghost, anything. Preferably something small) in either the same area (away from the trigger volume) or in a different location that the player can't go to. Name this vehicle "host_check", and set it to spawn BY DEFAULT in all game types. Make sure it's a vehicle that is in the globals so it'll spawn by itself, otherwise this won't work.

This is to check in the scripts to make sure the game doing all of this is the server. It works because the vehicles are server-side only, and so if you try to check for a vehicle's existence and you're not the server, it will say the vehicle doesn't exist, which lets us check and see who's the server. If we allowed the script to run without making sure only the server is making the changes, then there would be two vehicles spawned for each spawn point: one is the real server-side one, and the other is a client-side copy that doesn't exist on the server and so is just useless and annoying to players.

4. With all of the vehicles that you need scripted in, place them where you need them and set their properties as usual. Just remember to give each one a unique name for the scripts.

5. Then, you're ready to actually do the script:

(global boolean server 0)

(script startup vehicles
(>= (unit_get_health host_check) 0)
(set server 1)
(= server 1)
(object_create "first vehicle")
(object_create "second vehicle")
;; etc, repeat for each one

(script continuous respawn_stuff
(= server 1)
(volume_test_object "trigger volume name" "first vehicle")
(object_create_anew "first vehicle")
(volume_test_object "trigger volume name" "second vehicle")
(object_create_anew "second vehicle")
;; repeat each of these (if)'s for each vehicle. Use copy-pasting to do it faster.
(sleep_until (= 0 1))

Just replace the things in "quotes" and compile, and then test.

HUD Cinematic Titles / Chapter Titles Tutorial
By: Gamma927

First things first:

1) Download the String List Editor: http://hce.halomaps.org/index.cfm?fid=1049
2) Run it
3) For this tutorial, we'll only create one title. If you wish to use multiple cinematic titles throughout your map, just keep clicking add for each one.

Type what you want to appear into the box where you can type text, and click add. Repeat for every title you wish to add.
4) Click "save", and save it inside your tags folder
5) Once saved, run Guerilla, and open your .scenario file.
6) Scroll to the very bottom. In the boxes above the BSP, look for an area to enter in "ingame help text"
7) In this box, browse to your string list that you created.
8) Once done, scroll up a bit.
9) Under the giant heading which says "Cutscene Titles", click "add"
10) Repeat the following for every title you wish to add:
a) For name, DON'T put the text for the cinematic title. Rather, use something short and easy to type; for example, txt1.
b) For text bounds, put the coordinates in which you wish the title to appear. Default coordinates are: t = 425, l = 0, b = 446, r = 597
c) For string index, put the number corresponding to the text you want to appear. To figure out this number, go back to the string list editor. Next to every bit of text will be a number. For example, if you only have one title, that number will be 0. The second title in the string list will have the number 1. Enter this number into this box.
d) For justification, put the corner in which you want the text to appear. Default is 'right'.
e) For text color, put the color you want the text to be. Default is a = 255, r = 255, g = 255, b = 255
f) For shadow color, this will be the color surrounding the text. Default is a = 255, r = 0, g = 0, b = 0
g) Fade in time is how long you want to wait before the text fully appears. Default is 1
h) Up time is how long the title will stay up. Default is 3
i) Fade out time is how long you want to wait before the text fully disappears. Default is 1.
11) To repeat this for another, go back to the top and click add. Repeat the process for every string list.
12) This is the scripting part.


In your script, whenever you wish for your title to appear, add:

(cinematic_set_title "NAME OF TITLE")

Please note that the name of the title is NOT the title itself. Rather, it's the name you entered back in step 10a.

If you wish for the cinematic black bars to appear along with this title, add:

(cinematic_show_letterbox true)

Add (cinematic_show_letterbox false) whenever you wish to disable the box.

An example script that would display a title with the box is:

(script startup titleexample
(cinematic_set_name txt1)
(cinematic_show_letterbox true)
(sleep 90)
(cinematic_show_letterbox false)

Please note that the name of the title would therefore be txt1.

Compile the scripts, and you're done.

Another HUD Cinematic Titles / Chapter Titles Tutorial
By: Me KS

Chapter titles use "unicode_string_list" tags for storing the text.

For that, get this string list editor. It makes editing unicode_string_list tags much easier, since you can just open and save the tags directly without having to compile through Tool: http://hce.halomaps.org/index.cfm?fid=1049

Then, using the string list editor, make a new "unicode_string_list" tag with as many strings as you want. Each string will be one Chapter Title. Once you're done, save the tag anywhere, but preferably in the same folder as your scenario tag. Name it whatever you want.

Next, in Guerilla, open up the scenario tag. Go all the way to the very bottom and you'll see "Cutscene Titles". Just under there should be a tag reference that says "ingame help text". Browse on that one, and select the tag you just saved.

Then, just next to "Cutscene Titles", click the "Add" button to make as many chapter titles as you need. Just under should be "name". Make the names whatever you want, but make them easy to remember because that name is used in the script.

Now, the "text bounds" and "justification" should be self-explanatory, but they're not. I'm not sure what screen resolution the game assumes as a standard when using the "text bounds" values. If someone knows, that would help. But, t = top, b = bottom, l = left, and r = right bounds, and the 3 justifications are general positions: "left, right, center". You can mess with those some if you want a different position than usual, but if you want the usual, just enter these values that I got from a10's scenario:

t: 425
l: 0
b: 446
r: 597
justification: right

That actually makes it come out to the left, oddly enough.

Once that's done, set the "string index" to the index of the string you want to use for that chapter title. If you're not sure, you can get the number by opening the string list tag and looking at the number to the left of each string right in Guerilla. It starts from "0" and goes up.

Then comes the text color. The "r, g, b" values are just 0-255 levels of red, green, and blue to make a color. You don't have to worry about that, just select the color by clicking the box to the right. Most likely you want white. Most of the time, the shadow is set to black, but it can be changed too. Don't miss the "a" before each color though, that's the alpha transparency. 0 = fully transparent, 255 = opaque. So most likely you want 255 for no transparency.

Then, the fade times should be self-explanatory. "up time" is how long it stays fully opaque on screen once it fades in, "fade in" is how long it takes to fade in, and "fade out", same thing, but fading out.

Then, the script is the easy part. Whenever you want the chapter title displayed, just use this command:

(cinematic_set_title "cutscene_title")

Usually you want the letterbox to appear and the hud to disappear in conjunction with that. Just as a reminder, it's:

(cinematic_show_letterbox "boolean")


(show_hud "boolean")

HUD Weapon Pickup Message Text Tutorial
By: Gamma927

1) Get a string list editor.
2) Open globals.globals
3) Scroll down to the giant header that says "Interface Bitmaps"
4) Under the box that says "hud globals", click the open button on the far side. (by default, it's ui\hud\default.hud_globals)
5) Find the box next to "item message text"
6) Open this string with the string list editor and edit to your heart's delight.
7) Remember to save.
8) Open the weapon
9) Scroll down to the title "message-index"
10) In the message index box, indicate the index of the string list

HUD Message Text Tutorial
By: Me KS

hud_messages are different from unicode_string_lists that the string list editor saves. These you're going to have to do manually in notepad and compile them with Tool.

First off, in your notepad file, each line will be one hud message. Don't make them too long, as Halo does not clip the message to a new line in-game, and instead it runs off the screen. However, there is a way to make new lines if you really need that much text. It's shown later in the tutorial.

You have to name each message with a name that's easy to remember so you can refer to it in a script, and then directly after the message name, stick an "=" sign and then write the message right after. So, here's an example of a few lines:

vehicle_warning=>> WARNING: Enemies Alerted
crapload=>> Eliminate All Covenant Forces
crapload_1=>> Then Advance Into The Area

You don't have to include the ">>" at the beginning, but it was used for most hud messages and it looks best to have it.

Now, if you find yourself absolutely needing more space than the screen offers for one message, there is a 'new line' character and it looks like this:


Wherever this character is placed, the text after it will be part of a new line on the screen. I doubt it's necessary, but whenever Bungie used this newline character they always put one space before and 4 spaces after it. It's probably for aligning the new line with the first line, so I would do the same. Here's an example from b40's hud_messages (you might not see the 4 spaces, so just quote me to see them):

obj_chasm2=>> Reach the transition to the |n third chasm.

After you have all of the messages you need, save the file in the exact same directory as your scenario is located under the "tags" folder, but in your "data" folder, and you must save it as "hud messages.hmt" without quotes and change the "Encoding" to "Unicode", not the default "ANSI". You will know what I mean when you go to save with Notepad. Tool will not compile correctly unless you do all of these steps.

For example, if your scenario is located in "tags\levels\amazingmap\amazingmap.scenario", then you either have to find "data\levels\amazingmap" or create that directory and then save it there, resulting in the file's path being "data\levels\amazingmap\hud messages.hmt".

Then at this point you're ready to do the tool command hud-messages, which is:

tool hud-messages (path) (scenario name)

So, for the example above, I would type:

tool hud-messages levels\amazingmap amazingmap

because the path to either the scenario or the messages file is the same: "levels\amazingmap" and the scenario name is of course "amazingmap".

It then compiles your hud_messages tag into the tags folder where your scenario is and automatically gives a reference to it from your scenario so you don't have to do it yourself. Then, you're ready to refer to these messages in your script.


(show_hud_help_text "boolean")

shows or hides the hud help text

"boolean" meaning you can enter "true" or "false", as in "yes" or "no", or you can enter "1" or "0", respectively. When this is turned on, the hud message selected will be constantly displayed, so you should turn it off again when you want it to disappear.

(hud_set_help_text "hud_message")

displays "message" as the help text

This command selects which hud message to be displayed when the command above is set to "true". You use the name of whatever was before the "=" sign for the message you want in the original ".hmt" file you compiled. For example, for this line in the hmt file:

ohcraphelpme=>> You're Screwed, Have Fun

If you want that message, you use this command like so:

(hud_set_help_text ohcraphelpme)

(hud_set_objective_text "hud_message")

sets "message" as the current objective

This command does the same thing as the one above, except it sets the message to be displayed when you hit "Esc" and go to the pause menu under "Objectives".

HUD Strings and Pickup Icons Tutorial
By: Gamma927

For changing weapon strings:
1) Open up globals.globals
2) Scroll down to the Interface Bitmaps header and open the tag referenced in hud globals (by default, it's ui\hud\default.hud_globals
3) Open the string list referenced in item message text with a String List Editor (by default, it's ui\hud\hud_item_messages.unicode_string_list)
4) Scroll to the bottom and click "Add"
5) Type in "Picked up a Covenant Carbine" or whatever you want it to say when you pick it up
6) Select it and click "Add" again (Omit this step and the next step if the weapon doesn't have ammo)
7) Type in "Picked up %d rounds for the covenant carbine" or whatever you want it to say when you pick up ammo. NOTE: This string entry MUST be DIRECTLY BELOW the "Picked up a weapon" string entry
8) Save the list
9) (Follow this step ONLY if you did NOT overwrite the original string list with the new one) Go back to default.hud_globals and under item message text, browse to your new string list. If you overwrote the original, you do not have to follow this step
10) Open the weapon tag
11) Scroll down to the message-index header, and under message index, specify the index of the "Picked up a weapon" index entry (Here: http://i.imgur.com/FIphq.png; kudos to Dancing Mad for posting the picture).
12) Save the weapon and compile

For changing weapon pickup icons (assuming you have the pickup icons bitmap already):
1) Open up globals.globals
2) Scroll down to the Interface Bitmaps header and open the tag referenced in hud globals (by default, it's ui\hud\default.hud_globals
3) Open the bitmap specified under icon bitmap with Guerilla
4) Click "Show Bitmaps"
5) Browse through the bitmaps until you find the desired pickup icon
6) Remember the number specified under Bitmap
7) Open the weapon_hud_interface for the weapon
8) Scroll to the very bottom
9) Under sequence index, input this number (Here: http://i.imgur.com/ITZM2.jpg; kudos again to Dancing Mad for posting the picture)
10) Save and compile

HUD Navpoints Tutorial
By: Gamma927

If you wish to attach a nav point to an object, (a biped or vehicle, for instance), you'd need to use:

(activate_team_nav_point_object "navpoint type" "team" "object" "vertical offset")

For "navpoint type", replace it with the type of navpoint you want. I don't really remember all of them; in fact, the only one you probably need is "default". That's the default blue arrow used throughout the campaign.

For "team", this is the team that sees the nav point. Obviously, you want the player to see the nav point, and thus, you use "player". If this is a multiplayer map, teams are done differently, and the player team is blue team (afaik, iirc). I'll check tomorrow.

The "object" is the object you wish to attach the nav point to. Just substitute it with the name of the object you want (this can be specified in the properties pane when you select the object in hierarchy view).

The "vertical offset" is how high above the object you want the nav point to appear. If you're all out of ideas, 0.6 is a good number.

So, an example of this, using object1 as the name of the object, would be:

(activate_team_nav_point_object default player object1 0.6)

This activates the nav point. Whenever you wish to deactivate it, you'd use something similar, basically:

(deactivate_team_nav_point_object "team" "object")

"Team" and "object" are the same ones you used for the activate command.

If you wish to attach this to a flag rather than an object (flags are placed in hierarchy view; mission > game data > flags), then use

(activate_team_nav_point_flag "navpoint type" "team" "flag" "vertical offset")

and deactivating it would be: (deactivate_team_nav_point_flag "team" "flag")

Now, you probably want to make these nav points appear once you go through a trigger volume, or when something happens. Basically, you'd use a "conditional" phrase before the activate / deactivate commands. A conditional phrase is basically a command that checks whether a condition is true or false. Slightly confusing, but for now, we won't go too far into it.

Let's say you want to use a trigger volume to activate the nav point. Here, the trigger volume would be the conditional, because that's what checks whether something is true or not (whether the player is in the trigger volume)

An example of this script would be:

(sleep_until (volume_test_objects triggervolume (players)) 15)
(activate_team_nav_point_object default player object1 0.6)

Importing BSPs Into 3ds Max
By: Higuy

get BSP Tag Converter V2.5
import the bsp tag you want
make sure ONLY "include Portals, bsp markers, and fog planes" is checked
only those boxes
and then press convert model
when you get it into max
select and vertices and weld at 0.001
and you've imported the model

WordArt Scenery Tutorial
By: Gamma927

In max, under the create tab, click the Shapes button. Then, click the Text object type button. Create an instance and type the text you want. Then, right click, convert to editable mesh, and extrude it to a desired size. Scale it as you see fit. (I'm sure there's a more efficient way to do this, but with my limited modeling skills, this is how I'd do it)

Hit m to bring up the materials manager thing, and click the Standard button on the right, underneath the balls (insert pun here). Choose Multi/Sub-Object from the resulting list of materials, and choose "Discard old material" when prompted. Click the very first result, and next to the Standard button, there will be a text field. Type in the name for the shader, for example, letters. This'll be the name of the shader that'll be referenced in the .gbxmodel. If the shader exists in your tags folder, it will automatically be assigned. If no, a blank one will be created in the tags root folder upon tool's compilation.

Then, create a small sphere, radius 1, and name it frame scenery. Put it in the center of the text. Click the link button in the toolbar or wherever it is, and link to the sphere. Then, use the JMS exporter to export it to a JMS (different process for Gmax). Once exported to a JMS, put it in the data folder, and create a subdirectory for the alphabet letters. Create a models folder in that folder. (Ex: C:\Program Files\Microsoft Games\Halo Custom Edition\data\scenery\alphabet\letters\models) Put the JMS inside this folder.

Open up the command prompt, and type in:
cd C:\Program Files\Microsoft Games\Halo Custom Edition
Hit return. The prompt should now shift its directory. Then, type in tool model, followed by the directory of the models folder, noninclusive. Using the example from the previous paragraph, you would type:
tool model scenery\alphabet\letters
Tool will take a moment to compile, and when it's complete, you'll have a new .gbxmodel in your tags folder (the reciprocal of the data folder). For example, if you placed the JMS in data\scenery\alphabet\letters\models, your new gbxmodel will be placed in tags\scenery\alphabet\letters.

Open up Guerilla, and at the top, click File > New > Scenery. In the new .scenery file, under model, browse to your gbxmodel. Save. Now you're ready to use it for whatever purpose in your maps.

Or, you can stack crates in Sapien to spell out words. Crude and ineffective, but that's an alternative.

Netgame Equipment Tutorial
By: Gamma927

You have to add the weapons as netgame equipment. If you don't have one, do this:

1) Open Guerilla
2) File > New > Item_Collection
3) Click "Add"
4) For weight, specify 100
5) For item, select weapon from the dropdown box, and click the three dots on the far side. Browse to your .weapon
6) Specify your spawn time.
7) Now, open Sapien. In Hierarchy view, go to Mission > Game Data > Netgame Equipment
8) Put down flags in the game view where you want them to spawn
9) In the properties pane, browse to your netgame equipment, and set the spawn conditions to all games
10) Note: The weapons will not appear in game view.
11) Save.

For vehicles, the vehicles must have been specified in the globals. To do this, do:
1) Open Guerilla
2) Open tags\globals\globals.globals
3) Find vehicles
4) In the dropdown list, there will be six vehicles. NOTE: YOU CANNOT HAVE MORE OR LESS THAN SIX TYPES OF VEHICLES HERE.
5) Replace an existing vehicle with the one you're trying to add. You MUST replace, as adding won't work.
6) Save.

Then compile your map, and you're good to go.

Script Header Tutorial
By: Gamma927

Every script must have a header:

(script "script type" "script name"

You can replace script name with whatever you want, although if it has spaces, it must have quotations around it. For script type, either use a startup script for a script that begins as soon as the map is loaded, a dormant for a script that has to be woken (through the wake command), a continuous script that is continuously executed throughout the map, or a static void, essentially a script declaration that creates a new script command. For your script, just use a startup.

So, it'd look like:

(script startup scriptname
(vehicle_load_magic hog1 "" (ai_actors elite/W1drive))

Timer Tutorial
By: Gamma927

For your timer, this would work:

(script startup timer
(show_hud_timer true) ;; Shows the timer
(hud_set_timer_time 10 0) ;; Sets the timer's time to 10 minutes
(sleep (* (* 60 10) 30)) ;; Sleeps for 10 minutes. I'm doing multiplication cuz I'm too lazy to multiply this stuff out this early in the morning
(player_enable_input 0) ;; Player can't move
(object_cannot_take_damage (list_get (players) 0)) ;; Player can't die
(ai_disregard (players) true) ;; AI ignore players

Now, you're wondering why I didn't fill in the HUD text stuff for you. This part is a bit complicated. You're going to have to create a new txt file, renamed to hud messages.hmt (hmt being the file extension). When you save this, make sure it's set to unicode encoding. Then, inside, place your HUD texts in this format:


So if I wanted to display something like, ">>Go through the teleporter", I'd use:

obj1=>>Go through the teleporter

Please note that obj1 is the index, and that we'll be referring to that in the script. Once you've filled the hud messages.hmt file with your objectives (NOTE. YOU CANNOT HAVE TWO SAME INDEXES.) Then, CLOSE SAPIEN, and open your command prompt. Type in:


So if your scenario file was inside tags\levels\firefight\firefight.scenario, you'd put your hud messages.hmt file inside: data\levels\firefight

Then, you'd type into tool:

tool hud-messages levels\firefight firefight

Compile it.

Re-open Sapien AFTER COMPILING. Inside your script, add

(show_hud_help_text true) ;; Displays HUD help text
(hud_set_objective_text INDEX) ;; Sets the objective thing in the pause menu
(hud_set_help_text INDEX) ;; Sets the HUD text to this
(sleep 150) ;; Sleeps for five seconds
(show_hud_help_text false) ;; Stops displaying HUD help text

Replacing INDEX with your index from your hud messages.hmt file. So if your index was obj1, you'd use something like:

(show_hud_help_text true)
(hud_set_objective_text obj1)
(hud_set_help_text obj1)
(sleep 150)
(show_hud_help_text false)

Now, cut that entire block and paste it where I said to (). THIS IS NOT A STANDALONE SCRIPT. YOU CANNOT USE THIS ALONE. Reference the above tutorial on script headers.

So your final script would be like:

(script startup timer
(show_hud_timer true) ;; Shows the timer
(hud_set_timer_time 10 0) ;; Sets the timer's time to 10 minutes
(sleep (* (* 60 10) 30)) ;; Sleeps for 10 minutes. I'm doing multiplication cuz I'm too lazy to multiply this stuff out this early in the morning
(player_enable_input 0) ;; Player can't move
(object_cannot_take_damage (list_get (players) 0)) ;; Player can't die
(ai_disregard (players) true) ;; AI ignore players
(show_hud_help_text true)
(hud_set_objective_text obj1)
(hud_set_help_text obj1)
(sleep 150)
(show_hud_help_text false)


How to make a Firefight map
By L0d3x

This tutorial will teach you how to make a basic firefight map, similar to the one seen in my b40_firefight.
After having read this, you should be able to understand the scripts that I released for said map.
Said scripts can be found here: http://www.filefront.com/14831897/final.hsc
The map can be found here:

Things that are used in this tutorial, but aren't covered specifically in this tutorial:
- custom animations, compiled as a .JMW, will be used to animate dropships to come in and leave the map
- basic sapien knowledge
- knowledge of how to get a script working/compiled in Sapien (creating a .hsc file).

We're going to assume that the animations are compiled into the following folder:
"levels\my_firefight\my_firefight_phantom", and the animation itself is called "top_anims".
"top_anims" itself contains 4 independent animations:
-top1_in: this animation was made to bring the dropship to a position above the battlefield.
-top1_drop: this animation was made to bring down the dropship to a position low enough to deploy troops.
-top1_wait: this animation was made to keep the phantom roughly in place, as the troops are deployed.
-top1_out: this animation was made to get the phantom out of the battlefield.

This tutorial will use a fictional scenario with following assets defined in Sapien:
- a phantom dropship named dropship1
- an ai encounter named dropship_actors, containing a squad named droppers, a squad named b, and a squad named c
- droppers squad should be set up to use firing positions A
- squad b should be set up to use firing positions B
- squad c, of course, will be set up to use firing positions C
- These squads will be used to let the ai follow the player around.
- Define the amount of ai you want the dropship to drop off in the squad named "droppers".
- Place starting points anywhere where the player won't be able to see them.
- Make sure that "automatic migration" is checked for squad b and squad c.
- place firing positions A wherever you want the droppers to attack initially.
- place firing positions B in the first "zone" where you want the ai to follow the player. When the player comes near this "zone", the droppers actors
will basically maneuver to zone B. The same applies for firing positions C, they just define another "zone" for the ai to follow the player, if he
crosses this zone.

Also make sure your map is set up as single player, and that you have a starting position for the player.
Make sure all "game modes" things for the starting position are set to "none".

Now that the stuff in Sapien is set up, it's time for the scripting. Don't be afraid, it's not that hard.

We're going to set up the scripts so that we have the dropship come in again everytime the actors inside the dropship die at the hands of the player.

First we shall define a static script that will take care of all the animations of the dropship.
A static script, when called, will execute everything within it. We can reference a static script as much as we want further in the .hsc file!

;;;This static script is responsible for executing the custom animations of the dropship, and unloading any ai in the dropship. Nothing more.
(script static void dropship1CustomAnims
(custom_animation top1 levels\my_firefight\my_firefight_phantom\top_anims top1_in 1)
(sleep (unit_get_custom_animation_time top1))
(custom_animation top1 levels\my_firefight\my_firefight_phantom\top_anims top1_drop 1)
(sleep (unit_get_custom_animation_time top1))
(custom_animation top1 levels\my_firefight\my_firefight_phantom\top_anims top1_wait 1)
(vehicle_unload top1 "passenger")
(sleep (unit_get_custom_animation_time top1))
(custom_animation top1 levels\my_firefight\my_firefight_phantom\top_anims top1_out 1)
(sleep (unit_get_custom_animation_time top1))
(object_destroy top1)

This script is pretty straight-forward. When called it will execute all the animations we made for the dropship.
Take special notice to the "vehicle_unload" command.

One would reference this static script by typing: "(dropship1CustomAnims)".

With a static script defined to play our animations, we now need a script that will control when the dropship animations should be played.
We'll use a continuous script to achieve this goal. Remember that we want the dropship to come in whenever the ai from the previous dropship has died.

(global boolean startDropshipTop1 false);This boolean will tell us when the custom animations for top1 can be played.
(global boolean roundComplete false); This boolean represents if a round has been completed or not

;;;This script is responsible for controlling wether or not the custom animations of the dropship should be called upon.
(script continuous dropship1Starter
(sleep_until startDropshipTop1)
(sleep_until (= startDropshipTop1 false));LINK ME

;;;This static script defines exactly what should happen within one round of firefight excitement.
(script static void top1_round
(object_create_anew top1)
;;create the ai and load them in the dropship
(ai_place dropships/droppers)
(vehicle_load_magic top1 "passenger" (ai_actors dropships/droppers))
;;set startDropshipTop1 to true, this will allow the custom animations to be played, see the continuous script above
(set startDropshipTop1 true)
;;let the ai follow the players
(ai_follow_target_players dropships)
;;script execution will be paused until all the ai from the dropship are dead
(sleep_until (<= (ai_living_count dropships) 0))
;;once all the ai are dead, the round is complete
(set roundComplete true);LINK ME AS WELL
;;we now let the above continuous script finish, and thus restart execution of the continuous content, see LINK ME above
(set startDropshipTop1 false)

;;;This script is responsible for controlling the (infinite) execution of rounds
(script continuous roundController
;;The new round has not yet been completed
(set roundComplete false)
;;Execute what should happen this round
;;Pause this script's execution until the round is complete
(sleep_until roundComplete);LINK ME AS WELL
;;Now a new round can take place once again :-D

Notice the comments I placed. You should see the connection between The lines that have "LINK ME" and "LINK ME AS WELL" as a comment.
This should further explain how the above scripts work together.

Alright, now you should be able to create a basic firefight map with a dropship!

You can, of course, further enhance the script and scenario to allow for a more exciting setup. Be creative!

You've reached the bottom of this enormous post!

Edited by Gamma927 on Jan 25, 2012 at 07:07 PM

Joined: Aug 21, 2010

Former biped rigger & FP animator

Posted: Jan 17, 2012 06:57 PM    Msg. 2 of 27       
HOLY COW this is going to take forever to read through. Best start now..

Joined: Jun 12, 2008

Steam: gamma927

Posted: Jan 17, 2012 07:07 PM    Msg. 3 of 27       
I should probably create a table of contents and an easy way to ctrl + f what you want to find. I'll do that one of these days when I don't have so much work.

Joined: Jan 18, 2009

Discord: Holy Crust#4500

Posted: Jan 17, 2012 10:18 PM    Msg. 4 of 27       
Wow, that's the most useful wall of text ever.

Joined: Dec 6, 2010

Taking a break

Posted: Jan 20, 2012 06:36 PM    Msg. 5 of 27       
I'm going to bookmark this :)

Joined: Jun 23, 2010

Aye Ready

Posted: Jan 20, 2012 06:40 PM    Msg. 6 of 27       
Quote: --- Original message by: Xoronatus
I'm going to bookmark this :)

or just copy to pdf.

game user10
Joined: Dec 9, 2011

Who is the Overseer?

Posted: Jan 21, 2012 03:36 AM    Msg. 7 of 27       
This is freakin awesome. Finally a HUD message tutorial. Anyway to convince Dennis to sticky this?

Joined: Sep 10, 2011

ᶘ ᵒᴥᵒᶅ

Posted: Jan 22, 2012 08:52 PM    Msg. 8 of 27       
gr8 turorial

Joined: Jun 12, 2008

Steam: gamma927

Posted: Jan 24, 2012 01:05 AM    Msg. 9 of 27       
Quote: --- Original message by: game user10
This is freakin awesome. Finally a HUD message tutorial. Anyway to convince Dennis to sticky this?

I sent a PM, but it's ultimately his decision. I can understand if he doesn't want to.

If anyone has any tutorials to add or requests for tutorials, please post! I'll be sure to add them to the first post. I'll also work on making it easier to find a specific tutorial.

Joined: Aug 31, 2011

Superior to you, Superior Musclez near Brussels

Posted: Jan 24, 2012 01:17 AM    Msg. 10 of 27       
I made a firefight tutorial, might fit in with the whole AI/scripting theme. Although it's a bit more specific than these "basic" ones.

Joined: Jun 12, 2008

Steam: gamma927

Posted: Jan 24, 2012 06:39 PM    Msg. 11 of 27       
That's fine. It's best not to discriminate by difficulty :D I'm guessing it's the one you posted on Halomaps; I'll add that into the first post after I finish this post.

Joined: Dec 28, 2010

Helo my friend, it's time to fight ;)

Posted: Jan 25, 2012 06:39 AM    Msg. 12 of 27       
Great tutorials i see here, thanks for all :D Nice for the community :)

Joined: Aug 31, 2011

Superior to you, Superior Musclez near Brussels

Posted: Jan 25, 2012 12:29 PM    Msg. 13 of 27       
Quote: --- Original message by: Gamma927
That's fine. It's best not to discriminate by difficulty :D I'm guessing it's the one you posted on Halomaps; I'll add that into the first post after I finish this post.

Cool, you forgot to add the title of it to the "index" aka "topics covered" part though! D:

Joined: Jun 12, 2008

Steam: gamma927

Posted: Jan 25, 2012 07:08 PM    Msg. 14 of 27       
There, just fixed it. Thanks for the heads-up!

If anyone else has any tutorials they want to add or have any tutorials they wish to request, feel free to post and I'll see if I can get that in soon.

-Helpful Poster-
Joined: Feb 24, 2007

Posted: Jan 25, 2012 07:59 PM    Msg. 15 of 27       
make it a pdf or even a txt file and upload it.

Joined: Aug 31, 2011

Superior to you, Superior Musclez near Brussels

Posted: Jan 26, 2012 01:35 AM    Msg. 16 of 27       
I agree with the Celtic fan :-)

Joined: Jun 12, 2008

Steam: gamma927

Posted: Jan 28, 2012 02:11 AM    Msg. 17 of 27       
Quote: --- Original message by: Maniac1000
make it a pdf or even a txt file and upload it.

I'll do that, but I was kinda hoping that this thread could be a sort of wiki where people could continue to add tutorials and request tutorials. That way, all the assorted modding knowledge can be gathered in one easy to find place. I guess things aren't going to go this way though, so I'll upload it as a PDF.

Quote: --- Original message by: sparky
Gamma, can you please add these all as new pages to our wiki at HaloDemoMods.com? Or if you don't want to do that, I would like to add them there myself, if you let me. Thanks.

I don't have the time to add them, but you can feel free to add them if you want!

Quote: --- Original message by: mastur cheef
When i saw Tutorial, and as author Gamma. I already knew then it would be some awesome awesome tutorials.

Haha, thanks!

Joined: Apr 2, 2011

Posted: Jan 28, 2012 05:33 AM    Msg. 18 of 27       
could you make fp animation tutorial, please? it won't need to be long.

Joined: Aug 6, 2009

Posted: Jan 28, 2012 04:42 PM    Msg. 19 of 27       
There are already plenty of fp animation tutorials on the website. You can't simply explain fp animation with words.

Joined: Jun 12, 2008

Steam: gamma927

Posted: Jan 30, 2012 12:14 AM    Msg. 20 of 27       
Quote: --- Original message by: afD2345
could you make fp animation tutorial, please? it won't need to be long.

As XlzQwerty1 said, I can't really teach animation with a text tutorial. It's more of an art than anything else and there are several video tutorials on Halomaps that explain this.


This is what I used to learn. It also covers exporting the animation. Just a quick tip though: ignore what the tutorial says about linking. I could make my own video tutorial one of these days, but I've been really busy lately / infected with senioritis, and I don't know when I can do it. If you want a text tutorial on exporting animations or on link constraints, I could create one, but it'd be more difficult to follow than a video tutorial.

game user10
Joined: Dec 9, 2011

Who is the Overseer?

Posted: Feb 28, 2012 07:36 AM    Msg. 21 of 27       
Bump. Also wondering if someone could tell me how to create the VISR effect used in CMT's SPv3 Truth and Reconciliation map.

Joined: Aug 21, 2010

Former biped rigger & FP animator

Posted: Feb 28, 2012 01:47 PM    Msg. 22 of 27       
Quote: --- Original message by: game user10
Bump. Also wondering if someone could tell me how to create the VISR effect used in CMT's SPv3 Truth and Reconciliation map.

Search is your best friend on the internet.
Edited by Spartan314 on Feb 28, 2012 at 01:47 PM

Dabouss 15x
Joined: Aug 9, 2016

Annnd Its Gone!

Posted: Aug 15, 2016 08:25 PM    Msg. 23 of 27       
whenever i type in (show_hud_help_text boolean true) or (show_hud_help_text boolean false) when i try to compile the scripts it just closes any idea why?
also when i did the nav point command (activate_team_nav_point_object default player g_warthog 0.6) it says that it is not a valid object. (im using Open Sauce Sapien)
Edited by Dabouss 15x on Aug 15, 2016 at 08:26 PM
Edited by Dabouss 15x on Aug 16, 2016 at 02:53 PM

Joined: Feb 12, 2013

h2 marine anims or i detonate the vest

Posted: Aug 25, 2016 05:35 PM    Msg. 24 of 27       
This is insanely useful and very easy to follow. Thank you so much.

Joined: Sep 11, 2010

HaloCE3.com MattDratt.com

Posted: Aug 26, 2016 03:49 AM    Msg. 25 of 27       
Yo Gamma when can we expect an update?

Joined: Mar 19, 2010

"ideological sense of respect and tact of a 5yo"

Posted: Aug 29, 2016 12:31 AM    Msg. 26 of 27       
Quote: --- Original message by: MatthewDratt
Yo Gamma when can we expect an update?

Hopefully soon

Joined: Dec 19, 2011

Send memes to www.loganpaul.com/cliffhanger

Posted: Sep 4, 2018 09:53 AM    Msg. 27 of 27       
Literally just commenting on this so people remember it exists if they need help! (Dennis pls no lock)


Previous Older Thread    Next newer Thread

Time: Sun March 29, 2020 11:03 AM 281 ms.
A Halo Maps Website