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.

Reply via email to