A node here, an edge there
SkoolKit 8.2 has been released. Please pop along to the download page, the Python Package Index, the Ubuntu PPA, or the Fedora copr repo to pick up a copy (no mask required).
First up in the list of new features worth talking about is the ability of
snapinfo.py
to produce call graphs. Supplied with a snapshot and a control
file, it will spit out a DOT file that can be converted into an image by
Graphviz (for example). So if you’ve ever longed
for a pictorial representation of which routine calls what in your favourite
game, 8.2 might be just what you were looking for.
Still on the subject of snapinfo.py
, that command has also picked up the
ability to read raw memory files, and to read configuration from
skoolkit.ini. And still on the subject of call graphs, the new @refs
directive (not to be confused with the old
!refs
skool directive in SkoolKit 1.x) may come in handy for declaring relationships
between routines that snapinfo.py
cannot deduce on its own, i.e. where one
indirectly jumps to another.
Elsewhere, the family of SMPL macros has grown by three: #LET
defines an
integer or string variable that can be accessed via a replacement field;
#FORMAT
performs a Python-style string formatting operation on a format
string containing replacement fields; and #DEFINE
defines a new skool macro.
“But we already have @replace
for creating new macros!” I hear some of you
cry. That is indeed true, and you may carry on using @replace
for that
purpose, if you wish. But I would urge you to consider using #DEFINE
as well,
for two reasons in particular. First, with #DEFINE
you can define a new macro
named #ONE
, say, and then define another new macro (#TWO
, say) in terms of
#ONE
. (Try doing that with @replace
; it’s tricky, if not impossible.)
Second, macros defined by #DEFINE
accept replacement fields in their integer
arguments, which means you can easily use variables defined by #LET
in their
parameter strings. If that’s not enough to at least make you want to learn more
about the power of #DEFINE
, then I don’t know what is.
Finally, the image macros (#FONT
, #SCR
, #UDG
and #UDGARRAY
, in case
you’d forgotten) now have tindex
and alpha
parameters for specifying an
alternative transparent colour and opaqueness factor on a per-image basis
(overriding the defaults). Meaning that even unmasked images can now be given
a transparent background.
Of course there are other changes in this release, but we’re out of time here,
so you should head over to the
changelog if you’re
interested. When you’re done, I strongly recommend taking #DEFINE
for a spin,
and seeing whether it really can put @replace
to shame.