Halo - Insane Challenge. I have made this map of 12-24 hours of modification to make this SP map a real-time challenging. A couple of extra AIs, modified marines, modified human & covenant particles.
Preface
[Under Review – Links coming soon]
In this lesson we will cover the creation of “scenery” and “sound scenery” objects with respect to map-making in Halo Custom Edition. Scenery objects are what you would consider pretty much anything but the “walls”, whether those walls be the natural walls of a canyon or the painted walls of an apartment. For instance, a table, a couch, a cup, a stapler, etc. are all scenery objects. Sound Scenery objects can be considered as invisible and intangible scenery objects that still emit sound. You can use these objects to place sounds in your level (like the sound of birds or creepy cave ambient sounds). Since you still have control over the position of the sound scenery, you have control over where these sounds are heard and how often which can give your level some extra environmental effects without having to render anything visual.
1 – What is Scenery?
With that brief introduction under our belt let’s get a little more detailed into how scenery works in Halo Custom Edition. I’ll keep this brief, but I think it’s important to have a grasp on exactly what is going on behind the scenes when you use scenery objects.
A scenery object, much like most things in Halo Custom Edition, is stored as a tag file in your tags directory. This means you can open it up in guerilla the same way you open up a .scenario file. When you open a scenery tag you will see something like this.
The highlighted fields are the only ones we’re interested in today.
Bounding Radius/Render Bounding Radius
Bounding radius is the radius in world units (1 world unit = 100 default 3ds max units) of a sphere that determines how the scenery object is rendered (the sphere itself can’t be seen of course). Essentially imagine a sphere that originates on your object and expands outward. If you can see this sphere then the object will be rendered. Very small values means the scenery may flicker in and out of visibility even if you’re near it. Very large values will mean the object will render regardless of if any player is looking anywhere near it, which of course wastes resources. For most purposes it is reasonable to set the bounding radius just large enough to fit your object so it will only render when a player is looking at/near it.
Render Bounding Radius is more important for scenery that serves a purpose; typically both the render bounding radius and regular bounding radius are equal, but for objects like weapons or switches, the bounding radius will also determine the radius away from that object that you can pick up/activate that object. In this case the render bounding radius will handle when the object is actually rendered visually as mentioned above while the regular bounding radius will instead handle when/where the object can be interacted with.
When setting either of these numbers you can easily find the right setting by creating a sphere at the core of your scenery and expanding it to cover your entire model. Find the radius of this sphere in default 3ds max units and divide it by 100 for the bounding radius you should enter.
Model
This is where you link a model tag file to the scenery tag file. This means that a scenery object as a whole knows nothing about its model, animation, etc. This is important to note since it means that you can re-use a model file multiple times with different scenery objects which results in many scenery objects with the same look but potentially different functionality (we’ll cover functionality later).
Animation Graph
This is where you link an animation tag file to the scenery tag file. Animation will play and repeat in an infinite loop by default. Animation is recorded based on the position of the frame object(s). Remember that in lesson 1 that to export a map you had to first link it to an object named “frame”. For scenery you may have multiple frame objects (named “frame_1″, “frame_2″, “frame_top”, “frame_whatever”) so long as they are all ultimately linked to a single object named simply “frame”. What this means is that like the model tag file above, once animation is exported it doesn’t care what model it came from or what it’s supposedly for; animation files can be re-used among many scenery objects as long as their frame objects are similar. We will cover animation in detail in this very tutorial below.
Collision Model
The normal model is what we will further refer to as the visual model while this is the collision model. As their names imply, the visual model is what you will see in game while the collision model remains invisible and determines what you can hit/stand on/touch. You can greatly use this to your advantage! Just as with maps, scenery objects need to be sealed which means the geometry can’t have holes in it, etc. However, the visual model is fairly exempt from this rule which means you can create a very intricate model for the visual part and a very simple model on the collision part to save time.
Physics
This is where you link the tag file that contains all the physics information for your scenery object. We won’t be going into detail on this in this lesson, but a default file is easy enough to generate based on your collision model so you can play with the settings at your leisure.
When you generate a .physics file you can open it up in guerilla (like the other tag files). You will find fields such as “Mass”, “Radius”, “Moment Scale”, “Ground Friction”, etc. which if you know something about physics you will know how to modify these to make your object feel more realistic. Since most objects are static for performance reasons (they don’t move with looping animation or move when shot, etc.) I’ll save this for a later lesson, probably in vehicles where it’s more relevant, since tweaking physics can be quite the rabbit hole to go down.
2 – Modeling Static Scenery
It is hard to capture what to do when modeling static scenery in text since scenery covers such a wide variety of objects. If you want some examples of scenery objects others have made you can check on Halo Maps.
Here are some of the main points of the modeling step of scenery objects. I am assuming you’ve gone through and understand lessons 0-3 here:
- The surface normals face outwardnot inward which is the opposite of how you make a Halo map! No surface flipping necessary, in fact doing so will break your model on export.
- The object(s) you make must still be comprised of editable mesh(es).
- You can put multiple separate objects in one model file! This is not like how we’ve been making the maps where it had to be one sealed unit. If you have multiple unconnected objects they must each be linked to an object whose name should start with “frame” as mentioned above. Name them things like “frame_leftdoor” and “frame_rightdoor” for example to easily keep track of things.
- All “frame” objects must be linked together to one single object whose name is only “frame”. This means you should only have one main “frame” object per 3ds file.
- You do not need to include a +sky material unlike in map making. You should still apply a material to all of your surfaces so that there are no errors on export.
- See the notes on visual vs collision model above and design an object with everything you’ve read in mind. If (and only if) you want to make a collision model that is simplified then save a copy of your finished visual model and then simplify your model and save it as something else – you want a separate 3ds max file for the visual and collision models in this case.
Go ahead and model something simple at this point keeping all of the above in mind.
3 – Exporting Static Scenery
When you’ve read up to this point and created your object, create a folder called scenery in your data directory. Just like with levels/maps you will put your raw model files in this scenery folder to keep them nice and organized. Inside the scenery folder create another folder with the name of your scenery. For example if we were making an apple scenery object you would create a folder called “apple”. Further instruction will pretend that the scenery we are making is indeed an apple. This is only for organization, but it is a good idea to keep this name consistent throughout your project.
Inside the “apple” folder create the following folders:
“models”, “bitmaps”, “physics”, “animations”.
Now use the same JMS exporter plug-in you use for your maps to export the visual model as “apple.jms” in the models directory you just made. Then if you have a different collision model, open up that 3ds max file and export that in the physics directory as “apple_collision.jms”. If your collision model and visual model are identical you can just copy the visual model from the models directory to the physics directory but be sure to rename it to “apple_collision.jms” when you do.
Bitmaps/texturing is pretty much ignored in this lesson because it is pretty much identical to how you texture a regular level. Just be sure your .tiff files are in the bitmaps directory you just made and run the appropriate tool command (tool bitmaps sceneryapple).
Run the following commands (the things in italics only) in the command prompt:
tool model sceneryapple – This generates the model tag file
tool collision-geometry sceneryapple– This generates the collision-model tag file
tool physics sceneryapple– This generates the physics tag file
Once all of these tag files have been generated you will find them in your tags directory in the sceneryapple folder (keep in mind that “apple” is just what I’m calling this scenery. Look for the name of whatever your scenery is. Sorting the scenery folder by date can help a lot.)
Open guerilla and click New and create a new scenery tag file. Link all the above tags you’ve created in the appropriate fields as shown in the picture above and set the bounding radius to a reasonable number (again look under the section on bounding radius above to find what’s “reasonable” for your scenery object)
Save this scenery tag file in the same directory as your other scenery tags (sceneryapple) in this example. Save it as apple.scenery.
Your static scenery object is now ready to import into a map. Open any map you have and add your scenery object in the same way you add weapons or vehicles as covered in lesson 1.
4 – Creating Animated Scenery
Complete all the steps above for creating your static scenery including the exporting part. Go back to your visual model 3ds max file (it actually doesn’t matter which one you use, but since animation and visuals go hand-in-hand I prefer to animate with the visual model). Perform some animation on the frame object(s) in your scene. Do not animate the model by itself. If you properly linked the model(s) to the frame object(s) then moving the frame(s) will also move the object(s). In the video I do a small intro to 3ds max animation, but for the sake of time/space in this text version I suggest you simply go to an actual 3ds max animation tutorial if you are not familiar with how to animate in 3ds max.
5 – Exporting Animated Scenery
When your animation is complete, export the .jma file to the animations directory of your datasceneryapple folder that you created above using the animation exporter plug-in you can find here: CAD Animation Exporter
Here’s where it gets complex (if it wasn’t already).
First run the command:
tool animations sceneryapple
to generate the animations tag file. Open it in guerilla and scroll to the very bottom. Locate the “node list checksum” number in the ANIMATIONS category.
Open apple.jma that you just exported above in any text editor and find that same number again (it should be around the seventh line). Just keep this file open for now.
Open your visual model tag file in guerilla (it should be something like apple.gbxmodel and found in your tagssceneryapple directory). Take note of the “node list checksum” number which is right under flags at the top of the file. Replace the number in your apple.jma file that you’ve located with the number found in your apple.gbxmodel then save and close apple.jma and run the command above again to re-export the animations with the correct checksum. You shouldn’t have to do this for animations with only one frame object involved, but I still recommend doing it as I don’t recall this being necessary on older 3ds Max/computer versions and I haven’t found that this trick is widely known so I hope to share it here so that if even newer systems break it further at least this fix may still work.
Your re-exported animation will now work with your scenery object. Open the scenery object you made in guerilla and link the animation tag file just like you did the model tag files above. Save the scenery and re-import it into a level you have in Sapien. You may or may not have to save, close, and re-open Sapien in order to see the scenery objects animation.
6 – Converting Sounds for Halo
We’re going to get your scenery object to emit some sounds!
First get the following tool: WAV to Halo OGG Sound Converter and export it into your Halo directory (overwrite anything it asks to).
Note the name of this tool; you’re gonna want whatever sound file you want to be in .wav file format. I use Audacity to convert/create .wav files since it is free (no link here, Audacity is pretty well known just search it).
Once you have a .wav sound file that you want your scenery object to emit, open the 2,exe file in your Halo directory (the comma is supposed to be a period in 2,exe but typing that phrase in a post causes it to 404 in my site apparently).
Click on Converter and select your .wave file. Play the file to make sure it’s correct and then insert a file name for the resulting file name and click convert (leave the format as OGG VORBIS).
A few cmd prompts will pop up along with an info window. When they disappear go to your tags directory and look under tagssoundmusicmusic to find your converted sound file. Keep this window open but also open guerilla and create a Newsound_looping tag file.
Click Add on the TRACKS category. Then click … on the loop text box in that same category to select your sound file you just exported above.
Create a folder called loops in your tagssound directory and save this tag file as a sound_looping file in the loops directory.
Open your scenery object and scroll to the ATTACHMENTS category and click Add. Select sound_looping in the type field of that same category then click … and select the sound_looping tag you just saved. Click Open on the loop text box of the sound looping tag file you saved above to open the actual sound tag file. Find the minimum distance and maximum distance fields and set them to reasonable numbers depending on what kind of effect you want (these fields have tooltips if you hover over them which describe what they do).
How I interpret it is (for example) set the minimum distance to 2 and maximum distance to 5. Then up to 2 world units your sound is loud and can be heard at full power. After 2 world units it starts to fade in volume until 5 world units away where it can no longer be heard at all. You can go ahead and mess with some of the other settings in the sound tag directory to tweak how it plays, but those options will not be covered at this point.
Save all files. Close guerilla and test out Sapien with your new scenery. Again you may or may not need to re-place the scenery objects and restart sapien before you can hear your sound play.
7 – Let’s Play – Stylish Edition
As a test to yourself design a piece of scenery that has animation and a sound that is timed to coincide with some movement of that object. Put that in a level, save the level as a map and test it out in Halo! If you succeeded then congratulations, you’ve created a pretty sophisticated and re-usable object that you can now fill your levels with!
This concludes the text portion of the tutorial. All of this and more is present in the video version, as each tutorial video (from lesson 1 onward) will contain one extra section than the text. Don’t worry, it usually covers something very specific that doesn’t often come up for most people. This time it’s:
8 – Ambient Sounds with Sound Scenery
Sound scenery is simply scenery without a model/collision model (the files are distinct though;a .sound_scenery file is made instead of a .scenery file though). Since I covered how to use sounds above in text you can pretty much imagine how to apply that technique to create sound scenery but if you’re curious just check the video link above and it will take you right to the part where I create ambient sounds coming from an invisible (and non-collidable) object.
<<Lesson 3 Part Two | Lesson 5 >>