After weeks of annoying guesswork I was finally able to implement proper rotations for point entities. Now if you ask yourself “Isn’t it just like rotating a vertex in 3D?”. Well, not exactely. Let’s just say I now know a lot more about Euler angles and rotation matrices than before and I am “absolutely” sure that will be of help in my future life. Yaha.
Anyway, when including detail groups into a source map (loose objects that are not meant to be a part of the curve itself), their member entities can be automatically rotated both along the Pitch and Yaw axis, which means the objects will follow the curve entirely in direction and orientation. This can be helpful to generate specific scenes I can imagine.
Realistic scenes like the one I added.
You know. Realistic stuff like that.
I think I will be able to release version 0.5 in the next couple of weeks.
I am still working on the new feature, which will enable you to generate additional detail objects along curve objects.
I had a hard time figuring out a specific calculation method, that actually wasn’t even necessary in the end, so there went one or two weeks of depressing work.
Pitch for Ramps
As you can see on the GIF I am including a pitch for ramps, which will make sense in some situations, where you want the detail object to actually follow the ramp completely. It won’t produce perfect alignments for every setup though.
Also at the moment the Origin of a detail object is its bounding box center point. Later I might include a way to use actual Origin brushes.
Creating Detail Objects
Detail objects are being created in the same MAP-file as the curve source objects. In order for Map2Curve to know which brush belongs to a detail object group, it has to be given a new Key and Value.
Currently it is done like this:
Key: m2c_dgroup Value: CustomGroupName
A detail object, or rather a detail object group, can consist of multiple different entities. Each one needs the same group name ofc.
What about Point Entities?
I am on it.
Entity angles and numeration
I am aiming at automatically generating rotations for point and solid entities, that use the “angles”-key (NPCs, weapons, light_spot, func_door_rotating, etc.).
Also I want add a function to number entities consecutively (button01,button02,…). For this the tool will look for keys like “target” and “targetname”. This makes generation of functional setups – that depend on individual targetnames – a lot easier.
Futile, is the word that could describe my effort participating in the ragemap 2019 event initiated by Sven Coop Forum’s mod Hezus.
The time target for the main part of that map was 3 hours. I ended up working on it a few hours on saturday and the entire sunday (the day of the deadline).
What did I do wrong?
While I know my way around Hammer and graphics, I barely know how to create multiplayer maps. I especially lack knowledge of Sven Coops gameplay and entities, which wasn’t really a problem so much, because neither did I own SC, nor were I motivated to download it for the mapping event.
So I just sticked with the standard Half-Life entities and put together a simple scene, where the team needs to split up and the main group has to protect the lone wolf, while he again controls a crane, enabling the team to escape. Finally the lone wolf can longjump down from the crane and catch up with the main group, in theory.
How well does this work in multiplayer? I don’t know. I should have started to work on this a week ago, then – maybe – I could have had the chance to test it along with some friends.
How did I create the map?
On the first day I created the crane textures and already mapped half of the the crane itself in Hammer. The crane textures were done in Photoshop CS3. I used reference images from google, mostly of Liebherr building lot cranes.
I took the rest of the textures from my existing project files of Nohra’s Concealment (maybe you already figured that out).
I used Map2Curve for the curved bridge and almost completely for the terrain. Here and there I had to fix something by hand of course, but the tool really saved a lot of time.
Mostly I was working in Hammer. I switched to JACK for creating the paths, which Map2Curve need to generate terrain.
Starting 2 days before a deadline might be a great way for keeping up the motivation, however it should be left to the experts.
Knowing the requirements of multiplayer maps also comes in handy, logically.
a little preview on the next feature for version 0.5 of Map2Curve:
Detail objects can be anything that is not meant to be turned into a curve, but is still supposed to be aligned along a curve object.
This will include point entities, too, as well as entire solid brush objects, for example lights, cross beams, ropes, etc. Anything you might want to “decorate” your curve object with.
Of course there will be certain limitations again, but this is at least meant to be a huge relief for certain mapping tasks. Primarily it eliminates the need for manually doing it by using “Paste Special” in an Editor.
I have accomplished all of what I was aiming for in this release, including the first version of the path extrusion feature and a complete overhaul of the texture alignment on ramps, which, as I posted recently, now works like the UV Lock feature in JACK.
Next thing I will do is probably creating a few video tutorials and updating the documentation.
As for the rest…
New Feature: Added path extrusion
New Feature: Added World-to-Face alignment conversion on map load
Overhaul: Complete overhaul of the texture alignment for ramps
New settings: p_reverse, p_cornerfix, p_split, ramptex
Added triangulation for 5 sided brushes
Triangulation now default for ramp generation
Fixed minor texture misalignment issues
Future planned features:
Handling of fixed level components like smaller detail objects (lamps, guard rails) or even whole level parts. At the moment you would achieve those by using special paste in an editor like JACK
“Real” path extrusion that works by intersecting lines, like you would usually have it in 3D software.
Texture alignment on ramps now finally working
The texture alignment on ramps kept bothering me for weeks now and I finally decided to use a method that does the same as JACK’s UV lock feature. It basically just pulls the texture into the direction you’re moving the vertices to and preserves the original texture shift, while adjusting its scales to fit the new face length.
While this is the best method for texture shift preservation, it will also lead to a certain distortion, when the slope angle is very steep. The pros of that method outweigh this con though.
Initially I ran into problems when I tried to compile the pipes in the upper example. I realized that this was caused by them having floating point coordinates, so I was able to compile the demo map without any compiling issues in the end, by just rounding all coordinates to integer numbers – AKA snapping them to the grid – using “round 1” during the generation process.
Doing this won’t have any noticable effect on the texture aligns or shifts, which is absolutely brilliant, because having a managable mesh is important when working in any editor. Of course this will also break any mesh with sloped but non-triangle faces. This should be kept in mind when rounding meshes that actually don’t need to be triangulated.
Alternative texture alignment
Anyway, as an alternative I also included the old method I was working on. It can be used in situations, where crossing details on the horizontal texture axis aren’t that bad, but having an upright vertical texture align is relevant for a natural look… or whatever.
Texture alignments on ramps
Another little preview on the current update progress for Map2Curve. I was able to polish the texture alignment on ramps a little further. It’s still not perfect, but this doesn’t matter in all situations.
If you want, take a look for yourself. I zipped all the relevant files for this demo map. You can download it here.
Beware, if you try feeding the included files to the current version of Map2Curve, which is 0.2, you will probably not create something beautiful.
The newly improved texture alignments will also make the new path extrusion feature much more interesting for large-scale generation of natural looking landscape.
Being able to use uneven heights is a very important aspect, when generating rock formations like these.
Currently I am still working on the next update for Map2Curve. In addition to the path extrusion feature, I want to concentrate on correct texture alignment for sloped surfaces this time, like those on a ramp.
When this works smoothly I will be able to combine it with the path extrusion feature which will make very interesting landscape possible.
Thoughts about architecture overkill due to generated brushwork
One idea suggests itself. With a tool like this it becomes easy to create curved brushwork with a lot of details in just a few minutes. A level of detail which quickly becomes too much for the Goldsource engine, so one has to keep in mind: With great power, comes great responsibility.
The polygone usage of these arcs or ramps is – compared to manual low-res construction methods – significantly higher, which will demand for a very thoughtful and occasional usage in suited situations, where a small amount of curvy architecture has a huge impact on the overall quality of the scene.
In my opinion creativity and discretion are very important resources in good leveldesign, if not the most important.