"This is amazing. How sailing should be." -
@Vadimuses"Awesome. It's a really cool script, definitely something that will make sailing a lot less tedious." -
@Xer"Oh my friggin' god ... this takes the headache out of sailing." -
@Nizaris---------------------------------------
MAP-BUILDINGThis script will build and append the sea map to an interactive Mudlet mapper window on-the-fly. All you need to do is sail. The map looks like this when you start (the red regions are water, where your ship can go):
As you sail to new places, your map will grow:
As was mentioned in this thread: forums.achaea.com/discussion/884/meropis-sea-map-via-mudlet-mapper, there are some challenges related to accurately tracking the movement of a ship. The map builder will try to match the new sea map to your existing mudlet map on each movement to account for silent drifting and to detect where you moved on a non-cardinal non-ordinal direction (NNE, for example).
For the utilitarians among us, there is an option to remove the printing of chops and land such that only the red (water) rooms appear. This speeds up processing.
PATH-FINDINGThe map that is built is fully interactive. You can double-click on any connected water room and your ship will sail there.
The path profile is calculated using the A* pathfinding algorithm and tries to avoid turning and going too close to chops. Advanced users who want to change the shape of their path can read below for details on how to customize pathfinding and ship turning.
WHAT YOU NEED- Mudlet 2.1
- GMCP turned on
- Download the script (see below)
BASIC USER INSTRUCTIONS
- Download the script.
- Click on Package Manager, then click on Install. Select the entire .zip file you downloaded.
- Get on a ship.
- Type "ymap on".
- Start sailing. You can start auto-sailing when the map appears.
BASIC USER ALIASES
ymap <on|off>: this either turns on the sea mapper or returns Mudlet mapper control back to your regular maps. The normal Mudlet mapper will be inaccessible while the sea mapper is on.
ystop: this stops auto-sailing (you'll still need to "all stop").
clearmap: this deletes your current sea map and allows you to start over.
yconfig shiptype <cutter|strider>: this gives the system an estimate of what your ship turning speed is.
yconfig print <on|off>: this allows you to choose whether or not to print the non-water rooms.
DOWNLOAD: https://sourceforge.net/projects/achaeaseamappin/files/?source=navbar
Shout out to @Vadimuses for a great deal of idea-bouncing and Mudlet help.
Happy sailing!
Comments
The pathfinding function calculates the "best" path using the A* search algorithm with a Euclidean distance heuristic and a cost function weighted against closeness to chops (walls) and severity/frequency of turns. The path-cost function is as follows:
path-cost = (wallweight coefficient) * (distance to walls) + (turnweight coefficient) * (severity/frequency of turns) + (distance coefficient) * (distance to goal)
You can modify the shape of your path by changing the wallweight coefficient, the turnweight coefficient, and the distance coefficient, using the following alias:
yconfig <wallweight|turnweight|distanceweight> <#>: sets the selected coefficient to a new value.
Default setting is wallweight = 1, turnweight = 5, distanceweight = 1. This is a path with these values:
This is an example path with wallweight = 1, turnweight = 10, distanceweight = 1:
This is an example path with wallweight = 5, turnweight = 5, distanceweight = 1:
ADVANCED USERS: SHIP TURNING
The script has some primitive methods for "ancitipating" a turn in advance. This is really only useful for seastriders. You can change the turning speed coefficient for your ship using this alias:
yconfig turnspeed <#>: changes the turning speed coefficient for your ship.
The higher this number, the faster your turning speed. The faster your turning speed, the less your ship will anticipate. So if you set your turning speed very low, your ship will start turning a room or two before it needs to move in that direction.
Default windcutter setting never turns in advance. Default seastrider turn speed is 4.6875. This number is basically arbitrary, but turn speed scales linearly with the number you input.
What you described used to happen when I was running much slower functions (that have since been sped up) and mapping a very long distance. It's possible that this could happen again with a slower processor. For the time being, use "yconfig print off" to speed up the processing a bit.
- highlighting rooms is a slow operation
- rendering ASCII characters on rooms is a very slow operation
Instead, you can use multiple room colors (fast operation) and only use room highlights to show the path.Elaina x
Svof
Mudlet Discord join up
@DontarionDrakor for twitter boredom.
as awesome as this is....I feel that by not using it I will be at an advantage.
People will use this as a crutch, and lose the true art of sailing when it comes time for shipraces.
@DontarionDrakor for twitter boredom.
Svof
Mudlet Discord join up
If you have experienced crashes, please answer the following questions:
1) How big was the sea map when you crashed, and were you printing non-water rooms? If you know the # of rooms, give me that, otherwise tell me where you sailed to and from since the last time you cleared the map.
2) How high were the room creation, pathfinding, and map matching times (echoed after every ship movement)? As an aside, if these are regularly more than 0.75 seconds, your computer should not be running this script.
3) What were you doing when it crashed? Were you in the middle of autowalking, did you try to clear the map?
4) What was the error message for the crash? Did windows just grey out the mudlet window?
5) What is your CPU and its rating?
6) What kind of ship were you sailing?
Ingame OOC message preferable.
Svof
Mudlet Discord join up
https://sourceforge.net/projects/achaeaseamappin/files/beta/
Thanks to Vadi for a lot of help making it run faster. Anyone who is currently able to run this should consider updating.
As for the crashing issue, I think I've addressed all crashes with anyone who contacted me individually.