dark souls in q3 - fpscup03-3
Posted: Sun Nov 02, 2025 11:40 pm
Hey y'all! I've wanted to make my own thread on this forum for ages, but I've never made a map that's worth posting about, until recently. Not that recent, for several reasons, but here we are. For over a decade, it's been a dream of mine to play other games but with quake 3's physics - strafe jumping, rocket jumps, overbounces, etc. I tried a few times, with Skyrim and Mirror's Edge and some other games, but they were too high-poly (Skyrim) or too inaccessible (basically any Unreal Engine game, like Mirror's Edge), so i did small beta tests locally and never achieved anything worth publishing.
Then came Dark Souls, and all the modding tools associated with it. We have direct access to all the models, textures, sounds, and levels. Not only that, but it's just old enough that the geometry is blocky which makes it perfect for Quake 3's physics, since uneven terrain feels terrible to move on. I set out rebuilding Undead Burg as prefabs, basically i'd cut out the individual structures in Blender, rotate them to line up with the grid, then rebuild them out of brushes in Radiant. I had most of this location rebuilt, but no good ideas for gameplay. Just running through the same level 1:1 is fun for a minute, but not worth the effort.
Undead Burg prefabs, all pure brushwork construction:

Along comes Rain and his fps cup, a defrag competition akin to the Defrag World Cup, but less serious. He wanted me to make another map for the third iteration of this competition (Last year, I made basically a ripoff of Hipshot's is5 for FPS CUP 02, and it was probably the best map in the cup thanks to his great work!). This was the pressure I needed in order to actually get something done, so I repurposed my Undead Burg idea for this event. I blocked out several gameplay ideas, but nothing really felt good, until I ditched the idea of a linear route and decided to just place a bunch of random items throughout the map and have players find their own routes. This let me rebuild what of Undead Burg I wanted, but I could also take whatever liberties I felt were necessary.
v1

v2

v3

It was going great, and I was making really good progress, until about a month before the cup started, when I decided to do a performance test and realized the performance was awful. I was getting around 140 fps on a pretty powerful machine, and others were dropping well below 100. I got kinda panicked, started asking around, and was informed about a technique which is a large part of why I wanted to do a write-up on this map in the first place: q3map_nonPlanar. This was the key that unlocked huge performance gains.
I had a massive number of surfaces, in large part due to all the curved boundary walls. Each face was a different surface, which are different things as far as the engine is concerned. Multiple faces can be merged into one surface, but usually it only happens on flat walls. If you want to merge faces that aren't on the same plane (some might call this a "non-planar face"), you need to add this parameter to your shader. However, it disables marks on these surfaces, which might not be a significant loss for some people, but for me it was a big enough deal that I wanted to be careful where I used this technique. I went around the map and applied this shader to any area that I felt was generating too many surfaces, but where I didn't care about impact marks. This took some time, but it cut down the final surface count by something like 40%, which led to a real-world performance boost of 25-30%, at least for me. I didn't get any performance complaints either, so it was a total success.
After months of rebuilding and re-rebuilding all of the different buildings, creating my own new areas, shader work, moving things around then moving them back, I had a finished product that I felt truly proud of. This is one of my favourite creations, and it really does give at least a little bit of the feeling of playing Dark Souls with Quake 3's physics. I'd like to do more in the future, but for now this is all we get.
Oh yeah, and the map is meant for the Defrag mod. It'll load in baseq3, or wherever else, but the bonfires won't work. Another friend of mine helped figure out a way to get the bonfires working using target_gives and ammo: each bonfire sets ammo for each weapon to either 0 or 200, and when you use the medkit, a global trigger gives you a new one with ammo attached. If you have <200 of one weapon, then when you pick up that weapon's ammo, you get teleported to the corresponding bonfire. This lets you have as many bonfires as Quake 3 has weapons with ammo, but it is pretty complicated to get your bearings and make any modifications or additions. It's an awesome system though, and I'm very grateful to have genius friends. This system makes this map even more special and truly one of a kind.
entity setup for each bonfire:

entity setup for the global trigger:

This was a great project, and I learned a lot from it. I got really comfortable with creating curves and arches out of brushes, and adding bevels to them. I hope at least one person opens this in radiant and browses around a little. I'm very proud of my brushwork.
If you wanna actually play the map, here ya go:
http://kitteh.maverickservers.com/maps/fpscup03-3.pk3
P.S. Another piece of tech that makes this project functional is Cyrax's great work on quake3e. If you try and load this map with quake3.exe, good luck....
P.P.S. Pretty much the entire map is built with brushes, aside from the vines, grass, trees, and iron fences (necessary for performance anyway), the bonfires (would be stupid to try and rebuild those), the stairs (the UVs were weird and i didn't feel like messing with it any more), and the jumppads (I made these myself, using one of the healing spells from the game as reference).
Then came Dark Souls, and all the modding tools associated with it. We have direct access to all the models, textures, sounds, and levels. Not only that, but it's just old enough that the geometry is blocky which makes it perfect for Quake 3's physics, since uneven terrain feels terrible to move on. I set out rebuilding Undead Burg as prefabs, basically i'd cut out the individual structures in Blender, rotate them to line up with the grid, then rebuild them out of brushes in Radiant. I had most of this location rebuilt, but no good ideas for gameplay. Just running through the same level 1:1 is fun for a minute, but not worth the effort.
Undead Burg prefabs, all pure brushwork construction:

Along comes Rain and his fps cup, a defrag competition akin to the Defrag World Cup, but less serious. He wanted me to make another map for the third iteration of this competition (Last year, I made basically a ripoff of Hipshot's is5 for FPS CUP 02, and it was probably the best map in the cup thanks to his great work!). This was the pressure I needed in order to actually get something done, so I repurposed my Undead Burg idea for this event. I blocked out several gameplay ideas, but nothing really felt good, until I ditched the idea of a linear route and decided to just place a bunch of random items throughout the map and have players find their own routes. This let me rebuild what of Undead Burg I wanted, but I could also take whatever liberties I felt were necessary.
v1

v2

v3

It was going great, and I was making really good progress, until about a month before the cup started, when I decided to do a performance test and realized the performance was awful. I was getting around 140 fps on a pretty powerful machine, and others were dropping well below 100. I got kinda panicked, started asking around, and was informed about a technique which is a large part of why I wanted to do a write-up on this map in the first place: q3map_nonPlanar. This was the key that unlocked huge performance gains.
Code: Select all
textures/fpscup03-kitteh/m10_01_wall_32
{
qer_editorimage textures/ds_m10/m10_01_wall_32.tga
q3map_normalImage textures/ds_m10/m10_01_wall_32_n.tga
q3map_shadeAngle 88
q3map_nonPlanar
{
map textures/ds_m10/m10_01_wall_32.tga
rgbGen identity
}
{
map $lightmap
blendFunc filter
rgbGen identity
}
}After months of rebuilding and re-rebuilding all of the different buildings, creating my own new areas, shader work, moving things around then moving them back, I had a finished product that I felt truly proud of. This is one of my favourite creations, and it really does give at least a little bit of the feeling of playing Dark Souls with Quake 3's physics. I'd like to do more in the future, but for now this is all we get.
Oh yeah, and the map is meant for the Defrag mod. It'll load in baseq3, or wherever else, but the bonfires won't work. Another friend of mine helped figure out a way to get the bonfires working using target_gives and ammo: each bonfire sets ammo for each weapon to either 0 or 200, and when you use the medkit, a global trigger gives you a new one with ammo attached. If you have <200 of one weapon, then when you pick up that weapon's ammo, you get teleported to the corresponding bonfire. This lets you have as many bonfires as Quake 3 has weapons with ammo, but it is pretty complicated to get your bearings and make any modifications or additions. It's an awesome system though, and I'm very grateful to have genius friends. This system makes this map even more special and truly one of a kind.
entity setup for each bonfire:

entity setup for the global trigger:

This was a great project, and I learned a lot from it. I got really comfortable with creating curves and arches out of brushes, and adding bevels to them. I hope at least one person opens this in radiant and browses around a little. I'm very proud of my brushwork.
If you wanna actually play the map, here ya go:
http://kitteh.maverickservers.com/maps/fpscup03-3.pk3
P.S. Another piece of tech that makes this project functional is Cyrax's great work on quake3e. If you try and load this map with quake3.exe, good luck....
P.P.S. Pretty much the entire map is built with brushes, aside from the vines, grass, trees, and iron fences (necessary for performance anyway), the bonfires (would be stupid to try and rebuild those), the stairs (the UVs were weird and i didn't feel like messing with it any more), and the jumppads (I made these myself, using one of the healing spells from the game as reference).