Creating your first Building by Brsseb
Preparing for the lesson
Welcome to the 8th tutorial were we will make our very first building, a cute little house that we can walk into, open/close doors and maybe climb a little ladder too! First things first:
Im assuming you either have done all or most of my other tutorials or are experienced in modeling and the o2 interface, because I'm not gonna hold your hand anymore when it comes to texturing, placing vertices where i say they should be. Making buildings is an easy job because it involves mostly basic shapes like cubes and not much more. Its just a manner of placing and scaling them right and adding a proper texture. Not much advanced selection naming for the LODs either since buildings don't move or have much special features.
In this tutorial we will make a small house like on the picture below. I'm not gonna give you a done model right now since this is mostly a modeling tutorial, but i will supply you with textures and a configfile. We will create the structure part by part (a part may be a wall, floor, ladder, etc) and finally put it together as a working building, getting it ingame.
We will have two floors;a first floor with two doorways and windows, and a ladder up to the roof.
Get the project folder with textures and configfile Brsseb_lesson8_start.rar.
That's it. Start o2 and bulldozer, and save the new file as “firsthouse.p3d” in the firsthouse folder included in the zip and lets roll! (Hint, as you progress, make backups of the p3d file in case you mess something up, and you probably will (I did it 2-3 times)!).
We`ll start with the main floor. Its basically just a low profile box, very easy to make. We will do each part and texture it before we move on to the next, and then assemble the whole thing at the last moment (since buildings can get very hard to edit once all walls, roof and windows are in place).
Make sure you got that trick of changing the coordinates of vertices using the shift+E box, because its vital for the next steps. Play with it, try changing a box or a cylinders shape without using any scaling functions. Changing the shape of a structure using this method is a much more accurate one than relying on free scaling using the mouse and the CTRL button. And if we are to make our house of parts, me must make sure that all parts are aligned so that the pieces fit when we assemble it.
Now select the whole floor structure and name a selection for it named “floor1”. this don't have anything to do with the OFP engine, its just so that its easier to select our floor structure later during assembly.
Lets texture it so that the floor is truly done. We`ll use the file named “wood2.paa” for this. I assume you can load textures and know how it works (lesson 1), but ill help you a little on the way since you will be doing this mostly on your own later in the tutorial.
The floor structure is nearly done. It still have some ugly sides since we only applied texture to the whole structure from the top view, leaving only top and bottom face nicely textures. All the other sides are looking you fix that easily, its like you did in lesson 1. Select all 4 sides, one at a time, and apply the same texture to it (don't worry it you don't get the textures lined up right since this it just a practice tutorial). You should be able to do this yourself.
If the floor is ready textured, leave it in “0.000” LOD. Then make a new LOD and enter it. We will have one LOD for each part, and at the very end merge them together. Leaving the floor in 0.00 LOD will give us a nice yellow ghost picture of the floor for reference when creating the walls, which are up next.
Lets start with the walls. We will have two wall types, one for the right and left side with two windows in them, and a front and rear wall which have one window and a door in each. As you might guess, we will make one wall type and copy it to make the other. Lets start with the left and right ones:
Still with me? If you`re not, play around with the vertex placement some more untill you get it right. Next step is this:
Ok, the wall structure is in place. Lets texture it and duplicate it to make its alter ego, the wall on the oposite. Texturing is the same thing as last step. But we need one texture for the exterior and another one for the inside. The outside texture is called “wall.paa” and the inside is “wallpaper.paa”. Both textures are tile able, so you must use the trick from last step to avoid the texture being stretched, especially the small wallpaper texture. I'm not gonna help you on this one, your on your own. Here are some images of how i did it. Try to get it in a similar fashion, if not better ;). One hint is to drag the “wall.paa” texture as a 2x2m box and use that in all view ports so that you don't get too much different texture scaling when going around the wall adding textures. For the wallpaper texture, about 1/4 or less of a 1x1m grid seems OK.
Thats done then. Now select the whole structure, copy and rotate it so that it fits nicely on the other side. You should be familiar with rotating and such things by now, right? Using shift-E trick on selected vertices make sure that its properly aligned with everything. all should be the same, just that the values for the X coordinates for outer and inner is now -5 and -4 instead of + 5 and +4.
Finally select both walls and name them “Left&Right_walls”. Create a new LOD and move to the next step, the front and rear walls.
Time for the front and rear walls, which will have one window and a door each. First we only do the basic wall with holes in it. As creating these walls are similar to the previous ones, except for size and this has a doorways instead of a second window, I will make this section shorter.
Now that we have a wall structure, we must texture it. We use the same textures as before, with the same tile dimensions (2×2. for the “wall” and 1/4 or less for the wallpaper texture). The result is something like this:
Now make a copy of it, rotate it in place on the other side, making sure all vertices are on the right place. Then select both of them and name then “front&rear_walls”. Make a new LOD and move on to the next part.
We will make one inside wall with an open doorway so that the house at least have two rooms and not just one big one. Its a very simple wall structure that uses only the wallpaper texture and has only a doorway, no window holes.
But just having the floor as a reference is getting a bit tired now, so we need to copy the 4 wall structure we just made into the 0.000 LOD so that we can get a better reference. Do this now, Simply go to both the wall lods, select all and copy it into the original 0.000 LOD together with the floor. This is also a good point to save a backup of your file in case you mess something up later.
Now lets make the inner wall. Its simple:
As usually, texture the wall, this time using only the wallpaper texture.
When ready, name the wall “inner_wall”, make a new LOD and head for the next part!
Now its time for the roof. We`re not gonna make a full 2nd floor, but its not hard. Its basically just copying the thing we have made so far and place it on top of this one, but we`ll stick to a simple open floor, watchtower-style, just to keep things simple. To gain entry to the roof, we`ll make a ladder too!
Ok, now for the fence. We cant have our soldiers falling off the roof to easy, can we?
Nice! Now the ladder and the roof is done.
Lets position the ladder right:
OK, that's the basic structure of the building. Now we gotta combine all the parts into the first “0.00” lod, because its time to make the other lods (Geometry, Roadway, etc. More on that in a moment). So, first make a backup of the file we got now (if you mess up a part or looses track, you can access the backup and pick the parts you need with no problem).
Ok, lets do some proper LODs now, Geometry first. Move on.
The most common fault to do when doing buildings, is making the whole wall structures as a single object. Thats asking for trouble and most likely it wont work properly ingame. All the different walls should be separate pieces not connected to each other.
This isn't that important on normal view LODs like 0.000, so we could have combined all the walls. But for this tutorial i wanted to make the house fast to build, so i made all walls in separate pieces so we can use some of the original wall structures directly as Geometry walls.
This leave us with just the basic walls and the roof. For some reasons that has to do with the Roadway LOD we`ll add later, there is no need to use the bottom floor or the roof as geometry. Doing so might cause some clipping issues ingame.
One problem; you might have spotted that we are missing a proper geometry structure for the rooftop fence. Without it people might fall off easily. The problem is that when geo structures get thinner than .25 meters, people might fall right through it if they are running fast enough (you might have noticed this in ofp, especially on some fences or buildings with thin walls). So that's why we cant just use the thin roof wall structure we made in the 0.00 lod.
To solve it its best to make a structure thicker than the one its supposed to cover. It might be noticed ingame and confuse or irritate the player (all hate invisible walls in games), but i think it will be OK for out simple fence.
Only thing missing now is a small box structure to cover the ladder. We don't want people running right through our ladder, so we need this one. Its very simple:
Now select all of the structures and apply mass to it. Lets make it, oh, something heavy…30 000 is a nice value. Then, with all components selected, go to Structure→Topology→Find Components to make o2 automatically add the needed “ComponentXX” labels. Deleting the old labels (inner wall, left & right walls) is not needed, but its nice to keep your lods nice and clean. Removing the textures can be done by selecting all of the components, then hitting “E” to get up the “face properties” window and delete the three “…” in the lower edit box. But again, not entirely needed since ofp ignores any textures for geometry lod structures.
Final geo lod like this (textures removed)
Then geo lod is OK. But we need some more LODs before we can test it ingame. Move on.
Ok, time for Roadway LOD. IF you have never heard of it before, its the lod defining walkable paths for ofp men and vehicles to walk around on. It enable you to enter buildings, drive up ramps with cars and a lot more stuff. All components in Roadway lod is normally made out of single planes (4 vertice faces either single or connected together with more planes).
The geo lod hinder objects to pass trough them,but as a side effect hinders ppl to walk on them too! So we need the Roadway to indicate where the player is allowed to walk around.
Notice that if we wanted to have a staircase or a ramp up to the roof instead of a ladder, you would just create a slope with a plane for the soldiers to walk on (make sure it is connected to both floor planes or you might get some trouble). Also, make sure its not too steep of you will have trouble climbing it. If this ramp is designed for cars and heavy tanks, then you should note that the steeper the ramp is the easier it is to get a puncturing or damage to the vehicle if you are driving a bit too fast.
You can do a lot of cool stuff with the Roadway LOD, but respect it because it can get you in trouble of you mess it up (units falling trough the floor, jumping and shaking around like crazy ,etc).
OK, that's Roadway LOD. On to the next one then!
Once the Geo LOD is made, this one is usually easy, especially for buildings. Basically this is an LOD that helps the ofp engine how to render the house ingame relative to other objects nearby. Sounds strange? Sure is!
I can give you an example to show you what i mean. If you have made some addons you will know this problem:
About the same shot just with an old version of my Robinson R22 in front of the building. Notice that even though just a part of the R22 is limiting my view to the house in the background, the result is that the ofp engine just skips rendering the whole house! Also trees and other objects are missing.
The problem is that the R22 is missing an so called “View Geometry” lod. This lod is similar to the normal Geometry, just that View Geometry deals with rendering (when I use the word rendering i mean the way ofp draws each frame) and the normal Geometry deals with mass and collision detection. Basically the View Geo tells the ofp engine how much the addon “cover” the scene and where the holes are (our windows).
Hope you understood some of this because its very important when making addons. Anyway, because our house is very simple, we can use a copy of our Geometry LOD as View Geometry directly, without any need for editing:
The new lod is now identical to our Geo LOD, except the mass has been removed. View Geo lod also needs the component labels, but as we made them in Geo LOD we ca just leave them as they are.
Usually, buildings don't need Memory LODs. The exception is when the building have certain features, like a ladder.
Lets make the ladder working. Its very easy since we got only one ladder in our house:
These vertices indicate positions for climbing the ladder. It can be hard to get the soldier to climb right and you might have to test ingame and then move the vertices around to get it to climb right. Thankfully i have done this for you for this tutorial and if you place the vertices like in the above picture it will look OK (for a tut model that is ;) ).
Notice that the way the vertices are used to indicate the ladder, there seems to be nothing in Memory LOD to indicate the direction of the climb animation! So how do we know what direction the climbing animation will run on? The truth is that even that it might seems strange, a vertex actually have a direction vector or heading! Finding out the direction can be tricky, so the easiest way is to make the two points and test ingame. If it climbs the wrong way (say you really want it 90* to the left instead) , you can easily just select the two start and end points and rotate them. But for the way our ladder is oriented now, the default vertex heading a vertex has when you create them will be just fine. But keep this info in the back of your head when creating your own ladders.
Ok, thats Memory LOD (for now). Move on!
You might have noticed that the AI isn't very good at navigating buildings or advanced objects, it gets stuck sometimes or just avoid it totally. To get AI to move around inside buildings properly, you gotta make some “rails” or “path” for the AI to follow. Without them, computer controlled soldiers wont enter your bulding properly.
Also, you might have noticed from the mission editor that some buildings have a number of “positions” that you can place soldiers in. We are gonna have some of that too.
Name the vertices as in picture. Notice we have two entrances and five different positions that the AI can be stationed in. Also the AI should run trough the middle wall door and exit and enter the building pretty much OK.
OK, pretty weird stuff but that's the way its done. The AI should be able to navigate our structure OK now. I'm not sure if there is a limit in the number of “pos” and “in” points, so you should be able to add more or less points easily for your own buildings.
If you got a building with a ramp or staircase connecting two floors, you got to make AI network for both floors if you want the AI to go upstairs. Its just about creating a second network for the upper floor in a similar fashion, then connecting them with a sloped face where the staircase or ramp is. This way the AI can use the stairs too. But we wont go into this in this simple tutorial.
Now lets get move on. Not much left now…
As always I end a tutorial with a brief look at the configfile needed to get the addon working in ofp. Thankfully the config needed for a building is relatively short, so this shouldn't be much trouble if you followed my other tutorials:
Very simple stuff, just the standard define section (pretty much useless stuff for our house, but its becoming a habit to use it in all configs). Then its the all-important CfgPatches class where our house is defined. All in all, nothing new at all.
Here it gets a bit more interesting, but not much ;). You can see that i classed our house under the ViewTower class. Al though our house may not be a strait viewtower, we need to use that class because a viewtower has a ladder. The usual “house” class don't have the ladder function, so we need to use the class “ViewTower2” (or any other class that support ladders).
Ah, enough code. Lets get the house ingame!
Now we got all the LODs we need and the building is ready to go ingame. So, make sure you got all the steps right and that all files are in the “firsthouse” folder (the firsthouse.p3d, all the texture files and the config) and lets go! Fire up PBOTool and create firsthouse.pbo out of the folder, and put the resulting file in your addons-folder in ofp dir.
The house can be found under objects→firsthouse in the editor.
Yes, we have done it! Our little house is complete, its got a working ladder, windows to shoot out and the AI can navigate it pretty much OK. Not bad, eh? Well, hope you have enjoyed the tutorial and learned the basics of ofp building creation. Still some stuff to learn, but this is the most important parts. Note that for the sake of this tutorials simplicity I skipped making a Fire Geometry LOD, since it was learned way back in Lesson 4. You will notice that without such a LOD you will be able to shoot strait trough the building. You can make a Fire Geo real fast by just duplicating the Geometry LOD and changing the copy to Fire Geo. See lesson 4 for more info on this type of LOD.
Brsseb_lesson8_done.rar is the final PBO. If you had trouble with yours, check out my finished version. Extract it and compare the p3ds and see if you can spot any bugs if you had any trouble getting trough the tutorial. As always, drop me a mail if you need help.
As always, comments to the usual address (email@example.com) if you got trouble, spot some serious errors in my tutorial or got other stuff on your mind. Cheers!
This tutorial was written by Brsseb in ofp.gamepark.cz/_hosted/brsseb/, it was posted here with his permissions, thank you Brsseb!