...Continued from Part 1
Continuing on improving the layout, my previous maps had me first start from the middle and keep adding on the sides until the layout felt big enough. I never knew how big the cliffside should be beyond the derelict house, but it helped knowing how many people will likely be in the area, and base the size on that figure. For me, I always found 1 player every 256 units is a good reference on the scalability of any area, even in other games like Counter Strike and Team Fortress 2. Areas that were 128 units wide were usually designated as "cramped" areas, and 512 unit areas were open large areas. It's important to diversify these areas to make any map interesting and encourage map knowledge as a skill.
One gameplay theory I had nostalgia for (despite the rage it always caused) was sniper spots. Basically places where players had beneficial sightlines and an effective long range weapon, giving the one player an easy time to gain frags while the rest noticed and focused on taking them down. It created a common enemy for the server, like a temporary mini-boss, and made taking him down a satisfying reward, even though he was no different from any other player. I knew that these spots were very finicky and that it was easy to abuse these spots if not balanced well, reducing the overall fun factor for every player. I believed that there were three main factors that balanced sniper spots:
- The size of the sightline and line of sight (how far and how much the sniper player can see)
- The ease of getting to the sniper spot (how quick can players enter the spot and utilize it)
- The counterattack (can players counterattack? If so, how easy?)
As long as these three factors are reasonably attended in the map, this sniper spot would benefit the gameplay space in deathmatch. And with this in mind, I made the tower that would hold the sniper.
This Spanish style architectural tower situated outside of the normal gameplay space includes pillars, an L shaped layout, and a one-way teleporter that comes from the rebel base. There are no weapons in the tower and the teleporter is only active 30 seconds after use (during which its deadly to touch). If you want to utilize this tower to your fullest extent, you would've need to find either a crossbow and/or a revolver, and be lucky that you don't have to wait for the teleporter. Not to mention both the pillars and the buildings are an obstacle for snipers, giving players on the ground more leeway and have enough power from the weapons they find to shoot down the sniper in the tower, especially with grenades or an RPG that has a large area of effect to easily take down anyone in the tower. These mechanics, I believe, create a balanced sniper spot that takes effort to be in a powerful position that has enough counterplay that makes fighting the sniper a fun experience.
I also wanted to give the Combine side an interesting mechanic, since it feels like the rebels have a pretty significant advantage with their sniper tower. I didn't get anything concrete in my mind until I remembered about these combine dispensers in Half Life 2, particularly the one in the beginning of City 17 and in the Canals with the checkpoint station that had manhacks fly out. I don't think I was able to have friendly manhacks for the combine team (maybe with vscripting?), but I did figure that it might be possible to have a dispenser of items including health kits and ammo that would be an interesting lottery system.
I tried many different methods, many of which kept breaking in spectacular ways. The trigger_teleport method didn't work as it didn't recognise the items to teleport, and when I tried to spawn them individually in each dispenser, it caused a memory leak and I felt like it would require an unnecessarily complex I/O system that would contribute to memory leaks for low-bandwith servers. I almost gave up on this until I was curious how the actual dispensers in the HL2 Trainstation worked, as I initially assumed that it was only animations and would be too limited for me to work with. I was wrong, as it turns out, there's a very useful system in HL2 called Attachments that essentially attach any object to a certain part of a prop. In this instance, it's how the ration package is dispensed for citizens to take, and I am able to attach point_templates to it, essentially spawning anything I want.
And so in the above image, I made it so that when you pressed the button, you would get a random chance of an item to spawn and deliver to you. The dispenser itself doesn't have many collisions, so a func_door pushing out and rolling the items was added. I was limited to items that were small enough to fit the dispenser and for balance reasons, so no weapons (except grenades), mainly ammo and energy packs. There's also a delay that runs between half a minute to a minute and a half, mainly to make sure it doesn't get abused by those who want to spawn in intervals and not let other players play the item lottery. And so, both the Rebels and Combine have interesting gimmicks that give players some interesting opportunities.
At this point, I was almost complete with the map, I got a good feel for the gameplay, the layout was complete, I was artpassing everything, including creating custom models for the railings to make them look smoother and shinier! The only other thing left to do was the 3D skybox; I got the mountains and the rest of the lake added seamlessly, but I had an issue in making it feel like a believable distant scenery. In particular, I needed to place trees around, but there weren't many suitable props and I felt like these were going to be way too expensive compared to the prop skycards that TF2 uses for their maps. I was going to make my own custom skycard, until I realized there could be a potentially better solution.
VBSPs are used to create prop_details for blend textures on displacements, to create the illusion of grass using sprites randomly placed along the ground. I immediately thought, why can't I just use the same method for planting trees and foliage in a 3D skybox? And that's exactly what I set out for. I was a little intimidated by the process initially, but with some help, it was just as easy as editing a vmt file. I picked out a bunch of trees that I imagine would be in the Panama jungle, while also being individual so that there's no cut off and repetition. I cropped them, placed them in a vtf, wrote the necessary scripts in the vbsp file, and voila! It works like a charm.
The best part is that I had full range of options that I can easily configure in the script, including the density of the sprites, their size, the option to face the player, etc. I also used the opportunity to add grass sprites to blend textures that didn't have any prop_detail associated.
And from here it was time to polish up my map with optimizations and clipping. I initially wanted to forego the clipping as many hl2dm maps didn't have clipping, but I don't think authenticity here triumphs over jankiness. I added areaportals, hints, clipping to stairs and out of bound areas. I also added some easter eggs and hidden tricks that you can find if you check paths that nobody would take (including one that you would assume is out of bounds ;). I added cubemaps, packed the map, repacked it for smaller size, and uploaded it. This felt like a huge accomplishment to me, as I was in a moment of my life that was truly lost and had no idea what to do, so finishing this project and giving it out to the public made me feel better.
The last thing I discovered after uploading my map and playing it with the community is how close knit it was, despite the lack of official content after almost 20 years. This is really a tight-knit community and many appreciated that I made an HL2dm map in 2023. I played in some full servers, got some good feedback that I should implement the next time I update the map, and many really liked it. I hope this encourages people here to also make hl2dm maps because it was worth it for me, even if I'm not the biggest fan of the game itself.
And that's my dm_panama experience! I'll want to write another journal later about my experiences in the sourcemod community, but for now I hope you all enjoyed this reading and learned something from it.