This guide will explain how to port Half-Life singleplayer maps to Sven Co-op.
Svengine uses the same bsp format as the vanilla GoldSrc engine and so Sven Co-op is backwards compatible with maps from Half-Life. However due to the nature of the game being multiplayer and dependent to the server for changing the levels, certain key entities need to be replaced with newer updated ones, back paths to the previous levels need to be blocked and map configuration is required to ensure the maps are compliant with Sven Co-op level progression. Additional assets required by the maps, such as custom models, sounds and skyboxes must also be taken from the original mod and included.
The bsp porting process doesn't require decompiling then recompiling the bsps, although a decompiled map can be very useful for inspecting the map in a map editor. The only changes that really needed to be made are the entities which can be edited using a tool called Ripent, which will rip the entity data into a readable text file which can be edited, then merged back into the bsp. While this does work 100%, it is otherwise cumbersome, so better apps exist such as BSPedit and EntEd which allows you to directly modify the entity data without ripping them from the bsp, in the same format. Although the map editor is not necessary for converting maps as aforementioned, it is nonetheless useful for creating entities and many at a time easily rather than painstakingly writing out entity data by hand and can save a lot of time and effort. The bsp can be decompiled then loaded a map editor of choice (I recommend J.A.C.K) then you may place your entities as required. Once done, the map can be exported .map format then the file can be opened in a text editor and at the tail end you will find the new entites added there, from which you can copy and paste directly back into the original bsp using EntEd.
Step 1: Blocking backpaths
If the maps have a truncated design where the map ends in let's say a corridor and continues in the next, there will be a trigger_changelevel to go back and forth between the maps which in GoldSrc gives the seamless transition between the maps. In Sven Co-op the level progression must go forward and not backward, and to the transition to the previous map must be prevented by blocking path backwards with a wall. To block this, the classname of the entity (trigger_changelevel) must be changed to a func_wall. This has to be done for the trigger_changelevel to the previous map, not the next map, this can be checked by checking the map keyvalue. The the relevant keyvalues for the func_wall to be invisible must be added, such as "rendermode" "2" (otherwise the wall will be visible with aaatrigger placeholder texture, see func_wall) and the old trigger_changelevel keyvalues can be discarded. It is critical that the "model *x" key is the same- this brush model defines the volume of space that is filled by the entity and where its located in the bsp which is baked in at compile.
Step 2: Spawns
The player spawn is marked with an entity called info_player_start. This works in Sven Co-op, but it is highly recommended to use the entity info_player_deathmatch, which has many more features that will become useful such as advancing spawn points and triggering.