Up to Main Index Up to Journal for November, 2026
JOURNAL FOR SUNDAY 8TH NOVEMBER, 2026
______________________________________________________________________________
SUBJECT: A quick WMProto update
DATE: Sun 8 Nov 21:39:09 GMT 2026
Last weekend I made my WMProto project available. It’s an experimental version
of WolfMUD I’ve been working on. People were keen to probe and poke the code.
For them, I threw up a git repo: git clone https://code.wolfmud.org/WMProto
All week I’ve been pushing out commits. What’s new?
There is now stop word removal. This means player commands like “take the bean
from the jar” are understood. There is a new matcher for the parser. The
matcher is used to identify which items a player is trying to interact with by
matching aliases and qualifiers. For example “get ball”, “get green ball” and
“get red ball” are all understood.
There are also four special qualifiers: ANY, FIRST, LAST and ordinals. As an
example, suppose we have the following location:
[ Room A ]
This is room A.
You see a large red ball here.
You see a small red ball here.
You see a large green ball here.
You see a small green ball here.
You see a box here.
You see a frog here.
You see exits: northeast and east
$
The ANY qualifier picks a random item from the items matched. “get any ball”
would pick one of the four balls at random.
The FIRST qualifier picks the first item matched. This is also the default
behaviour. “get first ball” and “get ball” are equivalent and would match the
large red ball.
The LAST qualifier picks the last item matched. “get last ball” matches the
small green ball. “get last large ball” matches the large green ball.
Finally we have ordinals such as 1st, 2nd, 3rd, etc. “get 2nd ball” would
match the small red ball. “get 2nd large ball” would get the large green ball.
One qualifier that is not implemented is ALL. You cannot “get ALL ball”. There
are a number of reasons for this. It prevents a player from just hovering
everything up. It also prevents automatic secret discovery. For example if a
player could use “examine all” there would be no discovery needed. There is
also a smaller performance consideration.
All commands now used the matcher. A debug command $WHICH shows which items
would be matched for a given input.
Movement has been updated with the addition of ordinal directions: northeast,
southeast, southwest and northwest. Up and down have also been added.
The SNEEZE command now uses spatial topological lookups and is an example of
acoustic radial propagation. What!? Basically sneezing is now attenuated over
distance:
same location - “Diddymus sneezes.”
one location away - “You hear a loud sneezing close by.”
two locations away - “You hear faint sneezing nearby.”
This is calculated in 3D and acts like spheres progressing out from the
central location.
Narrative items have been updated and can now contribute to a location’s
description. Before this change the narrative would have to be written into
the location’s description directly.
Doors and portals have been added. Their implementation has changed, making
them more flexible and easier to setup. New OPEN and CLOSE commands have been
added to interact with doors and portals.
The sample test world has been updated with examples to demonstrate the new
movement, doors and a number of balls for playing with the matcher.
I’ve been developing most of this on my desktop (Intel Core i9-12900T).
Curious about performance, I also ran some tests on a Raspberry Pi Zero W.
I used the included bot runner to simulate players running around and
sneezing, with some interesting results:
BOTS MN/MX CPU MAX MEM TEMP
---- ----------- -------- -----
0 0.0% 0.1% 2.76Mb 37°C (Raspberry Pi Zero W)
1 0.2% 0.4% 2.79Mb 37°C :
32 1.0% 3.6% 4.69Mb 38°C :
64 1.4% 4.6% 7.08Mb 38°C :
128 2.8% 5.9% 6.90Mb 38°C :
256 5.6% 9.0% 8.85Mb 38°C :
512 11.7% 14.5% 13.50Mb 40°C :
1024 22.6% 30.5% 23.50Mb 41°C :
2048 43.2% 55.1% 43.90Mb 43°C :
4096 74.3% 85.9% 37.60Mb 46°C :
4096 6.3% 10.6% 113.00Mb 46°C (i9-12900T 16x Performance cores)
4096 9.6% 13.3% 109.00Mb 45°C (i9-12900T 8x Efficiency cores)
Each test was run for 10 minutes. For the Raspberry Pi Zero W a telnet session
and the bots were launched from the i9-12900T desktop. Networking used was TCP
over USB. Even with 4,096 bots running around on the Raspberry Pi Zero W the
telnet session still responded instantly. For comparison I’ve also included
figures for 4,096 bots on the i9-12900T with the server running only on the
performance cores and only on the efficiency cores.
If you have comments, spot bugs, have better ideas than mine — I’m just a
quick email away: diddymus@wolfmud.org
--
Diddymus
Up to Main Index Up to Journal for November, 2026