Simple, Unreal Editor's copy/paste system works by converting the selected actors into a .T3D level when copying and .T3D level into actors when pasting.
Example: the LEVELINFO actor.
Hit copy and paste it on notepad, should end up like this:
Code: Select all
Begin Map Begin Actor Class=LevelInfo Name=LevelInfo0 TimeSeconds=5.368258 AIProfile(0)=157 Level=LevelInfo'MyLevel.LevelInfo0' Tag=LevelInfo Region=(Zone=LevelInfo'MyLevel.LevelInfo0',iLeaf=-1) bSelected=True Name=LevelInfo0 End Actor End Map
Not this one, LevelInfo is the one exception you won't be able to paste back into the map.
As you can see, it is even possible to edit UnrealEd locked properties like NAME.
When a property doesn't show up on text, it's because it's at its default value.
When you copy a brush (movers included), you'll also get the polygon information.
The polygon information is actually an object of class Model, subclass of Polys (Mesh and LodMesh are subclasses of Polys), this means that it is possible to reference this object into a property (either Object, Polys, or Model).
Brushes and movers do have one property of class Model and that is it's Brush= property, this brush property is the one brushes and movers use and store in order to display their 3d appearances.
Let's copy the builder brush...
Code: Select all
Begin Map Begin Actor Class=Brush Name=Brush0 MainScale=(SheerAxis=SHEER_ZX) PostScale=(SheerAxis=SHEER_ZX) Group=Sheet Level=LevelInfo'MyLevel.LevelInfo0' Tag=Brush Region=(Zone=LevelInfo'MyLevel.LevelInfo0',iLeaf=-1) bSelected=True Begin Brush Name=Brush Begin PolyList Begin Polygon Item=Sheet Flags=264 Origin +00128.000000,+00128.000000,+00000.000000 Normal +00000.000000,+00000.000000,-00001.000000 TextureU -00001.000000,+00000.000000,+00000.000000 TextureV +00000.000000,+00001.000000,+00000.000000 Vertex +00128.000000,+00128.000000,+00000.000000 Vertex +00128.000000,-00128.000000,+00000.000000 Vertex -00128.000000,-00128.000000,+00000.000000 Vertex -00128.000000,+00128.000000,+00000.000000 End Polygon End PolyList End Brush Brush=Model'MyLevel.Brush' Name=Brush0 End Actor End Map
First, we see an object definition of (MODEL) starting with Begin Brush Name=ObjectName and ending with End Brush, we also see the keys Begin PolyList and End PolyList.
Inside of it, we see each individual polygon and it's flags, inside of the polygon we see the Origin, Normal, Texture alignment (optional) and Vertexes.
We can deduce this is a sheet polygon, now look at the FLAGS=, start checking the following list in decreasing order.
Taken from Legacy
Add this one: 8 = Intangible (used by sheets)0 Default , Use settings from Surface Properties for each individual surface of the brush.
1 Invisible , All surfaces of the brush are invisible
2 Masked , Use for palettized textures to make the first color in the palette (in Paint Shop Pro at least) invisible, see Color Blending
4 Translucent , Darker parts of the texture become transparent, see Color Blending
16 Force View Zone
64 Modulated , Greyer parts of the texture become transparent, see Color Blending
128 Fake Backdrop , Parallax SkyBox visible through surface
256 Two Sided , Surfaces display their texture from both sides
512 U-Pan , Texture moves in U direction, change speed in ZoneInfo or LevelInfo -> ZoneLight
1024 V-Pan , Texture moves in V direction, change speed in ZoneInfo or LevelInfo -> ZoneLight
2048 No Smooth , Square pixels
4096 Special Poly , Doesn't do a lot
8192 Small Wavy
32768 Low Shadow Detail , Reduces shadow detail; in conjunction with High Shadow Detail (below), makes extra low shadow detail
262144 Dirty Shadows
524288 Bright Corners , No dark shadows at the edges of the surface
1048576 Special Lit , Surface only gets light from Special Lit lights
2097152 No Bounds Reject
4194304 Unlit , Surface ignores lighting and is fullbright
8388608 High Shadow Detail , Enhances shadow detail
Result is 256 + 8 = 264, this face is a double sided non-solid square shape.
You can add more properties, alter (add or delete as well) polygons or simply tweak their polygon flags.
Ok, we reached End Brush and see something interesting: the BRUSH= property pointing to the previously defined object.
In short, we fist have the object definition, then it's referenced by it's name.
Did you know a second brush can reference the previously defined Model (BRUSH=) without defining a new one? This gives us the ability to add multiple brushes/movers and have them use the exact same Model object.
Did you know that if you export the map to T3D, you can change the LevelInfo class to a custom subclass?
Did you know you can remove a bad surface by using a unique texture and then finding that Polygon in the PolyList?
Did you know that when you paste something back into the map, it is moved by an offset of (32,32,32)?
Did you know that with this method you can join 2 brushes without intercepting them thogether? (great for specially constructed movers, reduces cuts drastically)
ATTACHING A SHORT TUTORIAL ON ONE GOOD WAY TO USE THIS.
REMOVING UNNEEDED SURFACES
I made a tube goingh through a room, now I want to separate both into different zones, the separator will be visible and must maintain the tube's shape.
The goal is not to waste one surface and keep polygons with matching vertexes. I take copies of both tube brushes and de-intersect them with a matching wall, luckily for me, that is right next to the tube opening.
This is how they look after de-intersected and added as non-solids. So I copy both brushes into NotePad, find the faces I'm not going to use and remove them.
You can apply a certain, unique texture to the faces you don't want to keep if you can't recognize them directly, then use the NotePad's search function to find this texture name and remove the face using this texture.
Since I'm removing faces, the structure shouldn't be a solid, even if i'm adding it as a green brush, let's just not take any chances and set the flags for all surfaces to 8 (FLAGS=8) Once done, copy the brushes back into UnrealEditor, place them where they're supposed to be, build, set the ZonePortal and Translucent flags and build again.
There shouldn't be any BSP oddities if you did the process right.