[crossfire] mapguide/director question
Alex Schultz
alex_sch at telus.net
Thu Sep 15 23:42:51 CDT 2005
Mark Wedel wrote:
>
Alex Schultz wrote:
>
>>
<snip> However believe I have thought of a solution that would take
>>
much less effort and would shave off the time it takes for the
>>
counterspell checking:
>>
Have a "countermap" which lists the number of counterspell objects on
>>
each square of a map, when one counterspell object is added, it adds
>>
one to the correct spot in the array (or whatever data structure it
>>
is), and when removed counterspells subtract one from that spot on
>>
the array. Then the big loop that currently goes through every object
>>
on the square for counterspells only has to quickly check the
>>
"countermap". This does not completely get rid of the issue, though I
>>
feel this solution is the most efficient in gain vs. complexity.
>
>
>
Its not really that simple however.
True, what I suggested isn't simple, but it is simpler than any method
I've thought of to merge all the fire objects created by a meteor swarm.
>
>
It isn't only that the space in question has to be examined for
>
counterspells - it is more generic - when an object is inserted, the
>
objects on the space have to be examined to see if any of the objects
>
on that space may somehow affect the inserted objects.
Indeed, though according to my profiling, the counterspell checking is
by far the largest portion of this.
>
A more likely fix might not be counterspells, but basically record
>
the type/subtype of the object(s) on the space that have check_walk_on
>
set (right only need to know there are two different types). The
>
assumption being an object of the same type/subtype doesn't effect
>
itself.
>
>
Thus, if you get a square and the only objects with walk_on set are
>
the same type of the object as we are inserting, we don't need to do
>
any checking. When types are different, then we go through and see if
>
there are directors, exits, counterspells, whatever. This would only
>
take a few bytes - if there are 4 different types of objects on the
>
space, we don't need to record the properties of all 4 - we just need
>
to know that there are 4 different ones so have to go to old
>
fallback. If there is only 1 type, we need to know that to check
>
against what the new object is.
Hmmm... this sounds like it might be a good solution. However it should
be noted that this wouldn't completely fix MS slowness of course, just
fix one of the several reasons why it's so bad, which would be a good
fix to do even if the other aspects of MS slowness (i.e. the raw amount
of flame objects) were fixed.
Alex Schultz
More information about the crossfire
mailing list