Reduce indirection
Submitted by: Frank Wilde <F.Wilde@casino2000.lu>
4 lines of code changed in 1 file:
Refactor duplicate empty party removal code
Submitted by: Frank Wilde <F.Wilde@casino2000.lu>
19 lines of code changed in 1 file:
Move same-party rejoin check to party_join()
Submitted by: Frank Wilde <F.Wilde@casino2000.lu>
9 lines of code changed in 2 files:
Improve 'maps' command output
24 lines of code changed in 1 file:
Add more sound events
6 lines of code changed in 3 files:
Ignore sound_chance
1 lines of code changed in 2 files:
Play sound for all kills
1 lines of code changed in 1 file:
Make else exclusive
1 lines of code changed in 1 file:
Generate batch scanner for more performance
1 lines of code changed in 1 file:
Remove unused function.
0 lines of code changed in 2 files:
Remove unused code
1 lines of code changed in 3 files:
Create proper objects in create_archetype()
1 lines of code changed in 1 file:
Make inline
3 lines of code changed in 1 file:
Place storage-class specifier at beginning of declaration
1 lines of code changed in 1 file:
Make it a fatal error if the empty_archetype does not exist
2 lines of code changed in 1 file:
Explicitly handle missing archetypes
4 lines of code changed in 1 file:
Convert macros to functions
15 lines of code changed in 1 file:
Un-nest else
15 lines of code changed in 1 file:
Improve StringBuffer allocation policy
A new StringBuffer is created for every object written or swapped.
Increasing the initial size from 256 to 512 drastically reduces the
likelihood that save_object() needs to realloc().
Change growth rate from linear (+256) to geometric (1.5x).
15 lines of code changed in 1 file:
Make find_insert_pos() much faster
When loading a map, this function used to take O(n^2). It searched
through all objects on a tile until it found the top. If INS_MAP_LOAD is
set, it throws away the result and uses the invariant GET_MAP_TOP. If
INS_ABOVE_FLOOR_ONLY is set, it throws that result away and uses the
floor it found earlier.
During map load, it is really INS_ON_TOP that matters. In that case,
check for that flag first and return immediately using the invariant,
without doing the O(n) search. Otherwise, do the search and return the
topmost floor or the topmost free space.
Since players like to put their things in large piles, this change
drastically reduces the time taken to load maps like player apartments.
5 lines of code changed in 1 file:
Refactor logic into separate function
39 lines of code changed in 1 file:
Do less work with INS_MAP_LOAD
21 lines of code changed in 1 file:
Add profiling for load_objects()
6 lines of code changed in 1 file:
Add profiling macros
16 lines of code changed in 1 file:
Fix build
1 lines of code changed in 1 file:
Fix some crashes caused by accesses to missing archetypes
218 lines of code changed in 17 files:
Return NULL if searching for the 0 skill
No skill has a subtype of 0; in fact, item_types uses 0 to represent
item types that cannot be identified with a skill.
However, due to a separate issue, find_skill_by_number() may find skill
tools with a matching subtype of 0 but no skill associated with it
(since skills have subtypes correctly set). Then adjust_skill_tool()
will try to give the player a new skill, which might duplicate a skill
the player already has.
4 lines of code changed in 1 file:
Set swapped map timeout to 0
1 lines of code changed in 1 file:
Run map change events when entering a tiled map
25 lines of code changed in 3 files:
Fix warning by marking argument unsigned
2 lines of code changed in 2 files:
Use strlcpy() instead of snprintf()
68 lines of code changed in 25 files:
Fix typo
1 lines of code changed in 1 file:
Add error message for observed crash
7 lines of code changed in 1 file:
Limit number of map swaps per tick
Swapping can take many tens of milliseconds. Swapping too many maps in
one tick can cause enough latency for the server to skip time.
10 lines of code changed in 1 file:
Fix leaks.
6 lines of code changed in 2 files:
Fix uninitialized value.
1 lines of code changed in 1 file:
Fix more leaks.
5 lines of code changed in 4 files:
Fix some memory leaks.
47 lines of code changed in 29 files:
Profile mapfile_load() and save_map()
14 lines of code changed in 1 file:
Make timespec_diff() available to other files
2 lines of code changed in 2 files:
Retire MAX_OBJECTS
MAX_OBJECTS has probably outlived its usefulness. It was previously "no
hard limit," only serving to trigger map swapping immediately after
loading a map, if the number of used objects exceeded MAX_OBJECTS.
At worse case, MAX_OBJECTS causes an O(n^2) search and O(n) swaps, where
n is the number of maps in memory. This happens immediately after
loading a very large map. The server takes O(n) to search for the map
with the smallest remaining timeout and swaps it, and does this n times
or until enough memory is freed. If the other maps are small, this does
not free much memory and causes the "performance hit" mentioned in the
comments. This was observed on Invidious, where the server experienced
delays of up to 700 ms immediately after loading a large map due to
excessive swapping.
Removing MAX_OBJECTS does not significantly change the server's
allocation pattern because the server never frees memory (it maintains
an internal free list) and because maps are swapped out based on timeout
at the end of each tick anyway.
2 lines of code changed in 6 files:
Improve 'malloc' command output
29 lines of code changed in 1 file:
Report skipped time in milliseconds
1 lines of code changed in 1 file:
Remove PlM column from 'maps' command
m->players should never disagree with players_on_map(m, FALSE), so this
column is redundant.
3 lines of code changed in 1 file:
Revert "Reduce calls to monster_compute_path"
This change caused several crashes on Invidious:
Program terminated with signal SIGSEGV, Segmentation fault.
853: FOR_MAP_PREPARE(op->map, op->x+freearr_x[rv.direction], op->y+freearr_y[rv.direction], tmp)
1 lines of code changed in 1 file:
Undo project name change
This not only changes the name of the distfile, but the directory where
the server looks for its config, var, and shared files. Undo this change
until a permanent fix can be made.
1 lines of code changed in 1 file:
Clean up warnings about junk files
1 lines of code changed in 1 file:
Update top-level EXTRA_DIST
1 lines of code changed in 2 files:
Prune whitespace
0 lines of code changed in 1 file:
Revert "Fix bug #809 -- Server: configure doesn't check for flex."
configure does check for lex, and sets it to ':' if it can't find it, so
that end users of the source distribution do not need lex installed in
order to build the server.
Also prefer AM_PROG_LEX over AC_PROG_LEX, because it uses the missing
script on systems that do not have lex.
1 lines of code changed in 1 file:
Fix source distribution
18 lines of code changed in 9 files:
Rename built treasures file to simplify install
5 lines of code changed in 2 files:
Call apply_manual() instead of ob_apply()
When a monster reads a scroll, the monster should be subject to the
usual race restriction check before applying it.
1 lines of code changed in 1 file:
Move apply event hook from apply_manual() to ob_apply()
Some code paths call ob_apply() directly without going through
apply_manual(). In these cases, the apply event hook is not run.
7 lines of code changed in 2 files:
Fix transport type apply method return values
8 lines of code changed in 1 file:
Chase arch move
11 lines of code changed in 2 files:
Move non-generated files from server/lib/ to arch/
Logically, these files belong with the archs, since if the archs change,
these files may need to change, too. Moving them to arch should also
remove the need for those running with custom maps/archs from needing
to change the server tree.
0 lines of code changed in 7 files:
Fix hardcoded 'chest' name.
5 lines of code changed in 1 file:
Allow multiple skills to share the same subtype.
This is useful for skills like harvesting (fishing, mining, and such) which work similarly and only differ in the skill.
As a side-effect, skill_names is no more indexed by the skill's subtype.
63 lines of code changed in 10 files: