These are issues I discovered when I was developing ioq3-urt (http://www0.org/w/Optimized_executable;_builds_of_ioq3_engine_for_urt) that might be helpful to all developers. They aren't all, but I'll try to include the most generic ones.
In random order: 1. Base sound repeat delay: The 'allowed' var in S_Base_StartSound() prevents the same sound from playing simultaneously more than an amount of times while that might not be required by the system resources. This had as an effect to have dropped sounds from automatic weapon firing and making users think - erroneously - that the actual fire rate was lowered. I suspect the hardcoded limit was there to avoid map or game bugs that wouldn't allow other sounds from playing. Solutions: higher the limit, alter the game/map, alter the audio system, force another audio system (OpenAL?, other?), make a var that alters it with a higher default (this is what I did since I was dealing with another guy's game). 2.HRTF for more 'real' audio experience is missing. OpenAL-Soft has a 'pseudo-Binaural' feature but it might need further development for proper HRTF. A GPL approach on HRTF based on ioq3 base audio is done by dmaEX/HD (http://forums.urbanterror.info/topic/23970-dmahd-new-sound-system/) 3. Server may be able to use a lag meter. Right now the client lag meter can only see what it receives (naturally). For example, if the client sees red, it means it saw drops from the server->client standpoint. A server lag meter would see all clients in little 'windows' and see what it receives from them. 4.The technical messages from the engine that are displayed to every player each map change are unnecessary to them and disrupt chat history. They can be easily hidden with a cl_quiet var (or otherwise put in development Prints). Similarly players don't need to see each time that OpenGL context was brought up successfully, only if on error etc. 5. cl_timenudge can be automatic. For example, calculate the standard deviation of ping for the last couple of seconds (or another more suitable benchmark) and apply it automatically. To avoid quirks it would have to be supported by the game partially (e.g. ping is erroneous at the beginning of a game round), or allow it to be executed explicitly when needed. 6.The highest resolution timer in the game is in milliseconds. While this is most probably not a big problem for a game, by using a Sys_Microseconds() you can get FPS to lock at any integer (or even a float) (right now is locked to 1000/integer values) . Additionally, it will be able to support more accurate benchmark results such as the FPS meter's. UNIX already uses a microsecond timer with the millisecond timer converting its output every time. related for games: The fps timer is in integer form. With no noticeable performance effects you can make it in floating form and get nicer results. 7. OpenMP might be able to help in certain scenarios but it might need more research or code reorganization. It might be more applicable to 'gameplay idle' sections of the work, notably the parts that do the work during map/game loading. 8. Minimizing can be done explicitly with a /minimize command using SDL's minimizing function SDL_WM_IconifyWindow(). This avoids several quirks, since e.g. ALT+TAB on windows isn't designed to minimize but to bring up a list of programs, minimization is a side effect. SDL's minimization has solved an issue players had with gamma not being restored properly. A /minimize could be also bound to a key. 9. JPEG user facilities (video or screenshot) have quality hardcoded to 90. It can be easily supplemented with a var. 10.Raw device mouse or also keyboard on Windows: According to Microsoft (http://msdn.microsoft.com/en-us/library/ee418864%28VS.85%29.aspx) it's higher latency to use DirectInput to access mice and the generic Desktop API is prone to negative acceleration and potentially lower resolution. By using raw mouse device you get no negative acceleration, higher resolution and lower latency than DirectX. It's not without drawbacks, e.g. left-handed settings may not apply since they are at a higher level but most gamers won't care. This is also in Quake Live. 11. the network code is effectively buggy for NAT LAN players reaching an internet server. NAT standard allows the alteration of source ports which confuses the server thinking it's the same client, having to have users explicitly setting net_port to another value. Solution: other net code. Workaround: randomize the port of clients to the unassigned/dynamic range(49152-65535) while supporting in-game UI-started servers to remain to default. Similarly: The alteration of source ports makes server heartbeats nonoperational. 12. You can give a fun /uptime command to users with no performance effects. It can even be saving the total time run of all runs in the config but that might need further thought to prevent it from being quirky when there are multiple executions at the same time. 13. An /r_windowPosition might help; there's already r_noborder anyway (all using SDL environmental vars explicitely). 14. cURL support is unforgiving if it doesn't find its file name. It can be simply seeking alternative file names of other versions since it supports them all. 15. Users may want to sleep their CPU explicitly for their nerdy reasons, e.g. with a com_sleep <milliseconds> running each loop. It may help more in a com_sleepWhenMinimized and com_sleepWhenUnfocused way, since com_maxfps facilities of ioquake3 currently ignore all throttling above 100FPS since there's no reliable cross-platform sleeping for less than 10ms (or is there?) 16. There are some OpenGL features that can be easily added without GLSL (e.g. Motion Blur for video recording and gaming with glAccum(), but the standard for it is supported only on NVIDIA). 17. Network, FPS meters can be more detailed, e.g. record max drop, average spike, highest value, track snaps server->client, packets client->server etc. 18. command buffer can be increased for larger config files relatively safely (e.g. no problems with 128K so far) 19. The feature of "It crashed, do you want a default-settings run?" could be disabled with a var for development purposes, e.g. 'I know it crashes, I'm debugging' 20. cvar amount limit can be increased with relative safety. 21. a lot of complains for default SDL's behavior to lock caps and num lock since it's common game behavior to treat them as common keys. A solution is to change the default by altering its env var. 22. Windows client/servers can use more than 512 .pk3s with a _setmaxstdio(2048); Those aren't requests. They're implemented in my client for the most part while others are propositions. _______________________________________________ ioquake3 mailing list ioquake3@lists.ioquake.org http://lists.ioquake.org/listinfo.cgi/ioquake3-ioquake.org By sending this message I agree to love ioquake3 and libsdl.