This is for after the 1.3.2 release.
As some of you suspected, a goodly number of the utility macros in
data/utils are very rarely used, often only by one campaign or
scenario. With macroscope this is very easy to check using the
--refcount option. Doing several runs with --from ../data/utils and
small reference counts is extremely revealing.
The question is: what to do about it?
For a long time, the safe answer would have been Nothing. We don't
want to silently break existing content. But macroscope liberates us
in two ways:
* We can check usage against the entire contents of the campaign
server (I routinely do this).
* Campaign authors can be expected to check their macro usage against
mainline -- and if they don't, our campaign server upload process
will soon do it for them.
This means that we can remove, rename, or reorganize macros without
risking any unforseen consequences. So...if we were designing a
macro utility library feature from scratch, what would it look like?
I see two goals in apparent contradiction to one another:
1. Encourage reuse of documented and debugged WML macros.
Scenario WML is easier to read, and easier to maintain, when
it uses macros that bundle up key constructions. We want
to encourage this, which argues for making the library as
large as possible.
2. Minimize load time.
On the other hand, we don't want every trash macro in the universe in
the default load path, because reading WML costs load time. Why
should every player have to pay startup overhead for macro definitions
that are rarely used? This argues for making the library as small as
possible.
Now let's distinguish two concepts.
* A public macro is one that has a documentation string and is
advertised as part of the WML interface of mainline, either through
the UtilsWiki page or the HTML-reference-page generator I just wrote.
* A core macro is oner that is always loaded at startup time.
Right now these two concepts effectively coincide -- the entire public
macro library is loaded on every Wesnoth startup. I think the right
solution is to split them apart -- make the public macro library big, but to
keep the core part of it that is loaded every time as small as
possible.
(It may turn out that *nothing* should be on the default load path.)
What I would do is create a third category of library macro, one which
is public but part of a macro package that scenario writers must
explicitly load.
Thus, for example, I'd take data/utils/teleport.cfg off the default
load path. Both macros in it are currently unused, but they are
reasonable things to have in the documented public interface.
As an example of a library I would add, I have a couple of macros I
wrote for NR that can be used to perform image effects on a unit.
Those probably shouldn't be core macros, but they probably do belong
in public space where they can be reused.
Inperatice, this will mean changing the default load path in game.cfg
and adding appropriate library inclusions where needed throughout
mainline.
I intend to move on this after 1.3.2 release, unless someone
explains to me why it would be a bad idea. It's my second agenda
item after merging Northern Rebirth.
--
a href=http://www.catb.org/~esr/;Eric S. Raymond/a
Before a standing army can rule, the people must be disarmed, as they
are in almost every kingdom in Europe. The supreme power in America
cannot enforce unjust laws by the sword, because the people are armed,
and constitute a force superior to any band of regular troops.
-- Noah Webster
___
Wesnoth-dev mailing list
Wesnoth-dev@gna.org
https://mail.gna.org/listinfo/wesnoth-dev