Fixed an off-by-one error on client IDs (these need to start at 1 as 0 is an invalid network ID). Morphing will now swap the client body's ID so it remains in the first 1 - MAXPLAYERS slots.
This is a combination of 2 commits.
Revert "New API for assigning unique network ids to objects"
This reverts commit e37c19b5b4.
This is the commit message #2:
Revert "Fix for Morph virtual"
This reverts commit 0ef042562e.
With the delayed handling of internal references of destroyed objects the function now returned without making sure that it really got everything.
Repeating until it cannot delete anything new anymore makes it work again as intended.
- Have a real finalizer stage for destroying objects instead of mixing them
in to the sweep stage.
- Base GC rate on a running average of the allocation rate instead of basing
it on the amount of time taken since the last sweep started.
- More GC stats for better tweaking.
* deleting some unused code
* turned several class methods into static local functions in cases where they never were used outside this file.
* inlined the dangerous assignment operator in the only place where it was used.
This solves two problems:
* The linked list is too slow, a map is better. A map cannot be used with statically allocated CVARs because order of initialization is undefined.
* The current CVAR system is an unordered mishmash of static variables and dynamically allocated ones and the means of identification are unsafe. With this everything is allocated on the heap so it can all be handled the same by the cleanup code.
Mainly to avoid problems with Raze, but eliminating this constructor lets us catch erroneous local definitions via 'auto', which can cause major problems if left undetected.
- Previous comments in dobjgc.cpp suggested that StepMul was used
to determine how quickly garbage was collected based on how quickly
memory was being allocated. This was not the case. Now it is.
- Remove calls to CheckGC from the thinkers. With GC running at a
stable rate (once per frame), there should be no need to inject
pauses into the collection process to keep it from injecting stutters
(provided StepMul is sane). The risk of running out of memory because
we don't run a collection pass absolutely every thinker should be
practically zero.
- Reduce DEFAULT_GCMUL from 400 to 200, since it does what it says now
instead of something else.
Since most CheckGC calls are within the main game ticker, the engine can accumulate a lot of data when creating/deleting objects in the menu or other UI parts and never manage to collect everything