(If you're only here for the download link, click here)
A while back, i was checking out the composer of Off, Alias Conrad Coldwood's personal website, when I stumbled across a tool I'd been looking for on and off, long enough to not be sure if it even existed. but here it was, tucked away in the corner of a random french dude's site, Sectorcut. Sectorcut is a pretty simple tool (so simple it's somehow written in BASIC), but for some reason this is the only tool like it I've found. You just run it from the command line, give it a few peramiters, and it'll automatically convert a 2.5D Doom, Build, or Jedi engine level, to a fully 3d brush based map, for Quake and it's derivative engines, as long as they're close enough related (like Half Life)
Screenshot from ACC's site
Obviously I spring to work trying to do something with this, converting Doom E1M1 into a Quake map, but I then immediately realized that I didn't really know where to take it from there. I didn't have any goals or projects, I just wanted to know this existed. So, a smidge disappointed, I close and delete everything, and make a mental note, satisfied knowing this exists.
Then a few years later Valve does something really funny, and now I'm suddenly VERY interested in Quake-adjacent mapping again (after a brief attempt at making a shitty Dusk map years ago). Once I'd played some (now very much alive) deathmatch, and looked around online, I noticed there hasn't been any direct ports of Doom's E1M1 for Half Life. There's this really impressive reimagining (that I didn't even realize was a deathmatch map until I checked it out right now LMAO), that combines E1M1 with MAP01 from Doom 2, but as far as I could tell no direct ports of the geometry and textures from Doom. So, remembering Sectorcut exists, I knew what i had to do.
I go ahead and use Sectorcut to convert the map, and load it up in Trenchbroom, my editor of choice (FUCK hammer), and got to work
The first thing I noticed was how none of the textures were applied yet. If you know basically anything about Quake/HL mapping (which I barely did at the time), the reason should be fairly obvious to you, but this took me way too long to figure out.
The spawn room of E1M1, without any textures applied
Eventually I realized Sectorcut has an option to export all the textures as WAD3, the file format half life uses for textures. However that fails due to Sectorcut not accounting for the fact that HL requires all textures to be divisible by 16, and for some reason Doom doesn't. Luckily Sectorcut also can export the textures as targa files. So after realizing ms paint is the only image editor I know of that can actually export an image old enough for HL to like, I converted all the tgas to bmp and manually added some pixels to the few images not divisible by 16, so that everything is kosher, and made my WAD.
A screenshot of Wally, the WAD creation tool I used
Once I figured that out, I applied the WAD with all the Doom textures, and because they had the same filenames, they were immediately applied where they were in Doom. The problem that took me a bit more time to figure out though, was that HL doesn't like it when a face doesn't have any texture applied to it. And everything that wasn't facing the inside was completely blank. I eventually realized that they DID have textures applied, they were just missing from my WAD. Weird, because it should have just ripped them from Doom, but I guess Sectorcut automatically applied "caulk" and "-" to certain untextured faces. Adding those to the WAD as generic missing textures was an easy fix, and now my map will compile.
The spawn room, notably small in size and with misaligned textures
The first thing I noticed, was how small everything was. I had to crouch just to get out of the spawn position, and everything was just far too cramped. this wasn't a huge deal, I can just re-export at 1.5 scaling. The second issue however, the misaligned textures, was more annoying to fix, simply because i had to manually go in and re-position nearly every face. It wasn't that bad (especially since I wanted to change some of them anyway, wtf were you thinking ID), but this could have been avoided if I didn't use the -MapCenter argument in Sectorcut, as texture positions are based on the coordinates in 3D space.
Now we're cooking with gas!
After re-exporting the map at 1.5x scale, raising the ceiling in spawn (for better bhops), selecting every face and increasing the texture scale as well so everything looked right, and deciding I'll deal with the texture alignment later, I was set to start with actually making the map functional (doors lights etc), and adjusting the layout ever so slightly to flow better for deathmatch.
I won't go through how I did every little thing, because most of it is just standard mapping stuff, but I'll go ahead and highlight all the layout changes I made, and anything that might not be obvious at first glance as to how I did it.
First, probably the least important thing I did, but also the one I'm proud of the most: The sprites.
For those not familiar with Doom, due to being an old ass game, anything that isn't level geometry is a sprite that always rotates to face the player (a billboard). This was pretty easy to do in HL, but not super obvious to a beginner.
Notice both the lamp, and the pillars in the back, and how they're just rotating sprites.
And see how the same happens in Half Life.
First, I exported the textures for the lamp, pillar, and candelabra using Slade, and used HL Texture Tools to convert them to sprites for HL, making sure to set them as parallel upright so that they behave how i want. HL Texture Tools claims to support automatically making the image transparent from a PNG, but that didn't seem to work for me, so I just converted them to BMPs and made sure the background color was solid, and the final color in the palette. (see the303). From there I just had to place down an env_sprite entity in the map, point it to my .spr, make sure it was at the right height, and place a clip brush over it so that it had collision.
How to export the sprite textures with Slade
And how to turn them into the HL .spr format
There was probably a better way to do all that (for example, while writing this I found wadmaker, which would have been super useful. probably just use that if you're following along for some reason), but I'm just documenting how I did things.
Next up, again not that hard but this time it's not just a function of the game engine: these respawning explosive barrels
Doubling down on how this one wasn't hard, I just pulled it from this example on TWHL, and replaced the crate brush with a barrel. The effect is achieved by making the barrel a func_button with 1 health (so that you can shoot it), that goes into the ground really fast. Then you just trigger an explosion where it was, and play a respawning sound when it pops back up.
Now feels like a good time to mention that I got the skybox I used from here. The texture for the top part is misaligned no matter what way I rotate it, and I have no fucking idea how to fix that so whatever.
A lovely overcast martian day
And oh yeah I also cut out the poison sign from brnpois2 and put it as a sprite over the nukage pools
Don'tcha just wanna go for a swim?
There were also quite a few spots where the original game didn't have any visible lighting, so I added some to make more sense in a proper 3d game
I really like this lamp sprite tbh
Speaking of lighting, I really like how this room turned out
Its hard to tell, but that blue back there is glowing
This secret over here was opened up, but I left the platform up top if somebody wanted to gauss jump (or rolled a lucky spawn). There's also a a ladder instead of an elevator, up to the path with a transparent wall to drop back down onto the main area.
This view would cost you $4000 a month in New York
I also opened up this secret for better flow, and threw a hidden health station and hivehand in a wall here. I could have sworn this was where the OG Xbox exclusive secret exit was, but apparently that's actually over here.
It even triggers a secret like Doom and everything. This was also how I found out the sound for finding a secret was just put in by the GZdoom devs lol
Once you get to the exit, you can flip the switch to get teleported to the top of the stairs area. I was considering making it take you to a random spawn point, but that felt like way too big of a headache, and a consistent spot is better for gameplay anyway.
I was considering making this the teleport animation from Doom, but making an animated sprite seemed like a whole can of worms.
The button in the stair room that opens the courtyard door glows red, which I thought was a nice touch.
It really completes the room, y'know? Ignore the fullbright sprited pillar directly above it.
If you change your mind about heading out to the courtyard (or spawned here and don't want to be seen somewhere with a property value that low), I put an easy teleporter right in the corner here. But if you change your mind and wanna come back, the gauss canon is right there.
This FUCKING teleporter gave me so much shit because I didn't realize ambient_generic needed a spawn flag to function like a button instead of a switch.
And last, but certainly not least, I made sure the zigzag and red room windows were widened and opened, for better gauss jumping. The spawn room windows were already plenty big, but I made sure to raise the bottom edge just barely enough so that you can't jump out without hopping on the barrel.
Just because I made sure it was possible to properly gauss jump, doesn't mean I'm any good at it.