-
Notifications
You must be signed in to change notification settings - Fork 9
Common Porting Problems
Extra edits are sometimes needed for compatibility with the vanilla HL client. Many of these issues are fixable in the custom client, but if I drop support for vanilla HL then both my server and this project die. Most players are not using the custom client, and a few are strongly opposed to ever using it. So, I fix the content rather than the client when possible.
A conversion script handles most common problems such as audio formats and texture downscaling. See the server setup for basic instructions on how to use it.
The vanilla HL client doesn't reset the text fade timer when a new message is received on the same channel. Change the channel on odd game_text entities in the chain to fix the scan-in effect (alternate 1-2-1-2).
Convert music to an .mp3 file and use ambient_music instead. stopsound commands are sent to players to prevent stuttering mic audio during/after cutscenes and on respawn.
Half-Life doesn't have any built in damage resistances. This means things die about 2-3x quicker. In most cases this is how I want the maps to work anyway. Bullet sponges aren't fun. In cases where there is a custom skill file it could be better to lower the hit multipliers so things aren't dying in 1 hit.
Use the hud_create.py script to generate HL25 compatible HUD files. It's meant to be used alongside the map conversion script, so place all map content next to it. Copy over valve/ sprite files as needed. It can generate both weapon hud files and custom system HUDs (health, armor, flashlight, etc.). You can test different sprite resolutions with the hud_scale cvar (or use the command menu options).
Add mp_bigmap 1 to the map CFG. Bullet decals and all other temporary entity effects are replaced with real entities when outside of the +/-4k world boundaries, so that vanilla HL players can see them.
Update: These boxes are only visible to HL clients since the client was updated to v0.4.0. Check the server console for precache warnings instead.
Add -heapsize 65536 to the server launch options. Maps with lots of custom models need this. The max value is 131072.
It gets stuck easily on nearby monsters. If it's bounding box intersects a monster, it won't move at all. Things like monster_furniture can also cause this. Make the turret nonsolid if it's necessary for a monster to be touching it.
The physics for this entity is different in HL. Either tweak the push speed or sv_maxvelocity if there's a problem.
Set sv_gravity to 780. Strangely, this has been enough to solve almost every case I've encountered. It's a small enough change that the average player won't notice. For very high ledges, you'll need to add/copy a func_wall to help them climb up. I'm not strongly opposed to adding the ledge grab feature, but it did enable some skips for older maps so I'm not certain it's an objective improvement. So far, 2-3 maps needed special edits, and 780 gravity was enough to fix 22 others (out of ~1600 bsps currently ported).
Use the port_uzi.py script to convert uzi meshes and animations for mirrored rendering.
There are no friendly versions of models in this mod (hgruntf.mdl, islavef.mdl, etc.). Instead, skins are used to recolor friendlies. This is done to save on precache slots. To fix coloring, decompile the friendly models and add their textures as a skin to the enemy model.
Recompile it to match the mod version. The hitboxes and positioning are likely different. Hopefully it's just a retexture.
This happens when there's a model precache overflow. You might test the map independently and not see this, then it happens on a live server because of plugins, or because more weapons are carried over in a map series (trigger_changelevel with keep_inventory enabled).
If it's not a bug in the SevenKewp entity, then it's probably related to how entities are ordered in SevenKewp. A new cvar mp_edictsorting will cause the active entity list to be in reverse order most of the time. This breaks setups where entities only look for the first entity with a given name in the list, when there are multiple possibilities. Try setting mp_edictsorting 0 if the entities themselves look fine.
Edict sorting is normally enabled so that non-networked entities can be moved to higher indexes in the edict list. This frees up edict slots which are very low for vanilla HL players, especially those on the legacy engine (1365 for legacy, 1665 for HL25, 8192 for sven).
Recoil in sven is doubled server-side. That is, if recoil punches your view up 10 degrees, then the server will shoot bullets out at 20 degrees. If the weapon recoil is small, you might want to double it to make the weapon roughly as hard to use as in sven. For large recoils it's probably too irritating to have the recoil doubled. I've chosen not to replicate this behavior in the server code because i want the crosshair to be accurate.
Follow these rules when making sprites that work in software mode:
- Use only the
parallelsprite type. All others get stretched weirdly depending on your perspective. - Never use frame origins. All frames must be centered perfectly or else they'll be cropped and stretched by perspective.
- Alpha-tested sprites must use black for the transparent color, or else you will see the background color in certain render modes.
- Never use the "Solid" render mode on sprites or else they render with inverted transparency. The "Texture" mode looks identical in OpenGL so use that instead.
Possible causes:
- A model texture has more than 512x512 pixels
- A model is missing an external sequence model (xxxxx01.mdl)
- A WAV file has bad/inverted cue points
- Something is wrong with a BSP model that uses a !water texture