Something similar to that is done in the PotC DirectSail mod, I think. 

Visit our website www.piratehorizons.com to quickly find download links for the newest versions of our New Horizons mods Beyond New Horizons and Maelstrom New Horizons!
Quick links for Beyond New Horizons
- Download latest version
- Wiki
- FAQ
- Report bugs here
- Bug Tracker on Github
Quick links for Maelstrom
- Download the latest version of Maelstrom
- Download the latest version of ERAS II
- Download the latest version of New Horizons on Maelstrom
Quick links for PotC: New Horizons
- Download latest version
- Wiki
- FAQ
- Report bugs here
Thanks to YOUR votes, GOG.com now sells:
- Sea Dogs
- Sea Dogs: Caribbean Tales
- Sea Dogs: City of Abandoned Ships
Vote now to add Pirates of the Caribbean to the list!
Quick links for AoP2: Gentlemen of Fortune 2
- Downloads and info
- ModDB Profile
- Forums Archive
A Pirate Podcast with Interviews
Music, Comedy and all things Pirate!
- Episode Guide - About - Subscribe -
- Twitter - Facebook - iTunes - Android -
- Youtube - Fill the Coffers -
float getRTplayerShipX()
{
float zeroX = MakeFloat(worldMap.zeroX);
float SeaX = stf(pchar.Ship.Pos.x);
int scale = WDM_MAP_TO_SEA_SCALE;
if (worldMap.island == "Cuba1" || worldMap.island == "Cuba2" || worldMap.island == "Beliz" || worldMap.island == "SantaCatalina"
|| worldMap.island == "PortoBello" || worldMap.island == "Cartahena" || worldMap.island == "Maracaibo"
|| worldMap.island == "Caracas" || worldMap.island == "Cumana")
{
scale = 25;
}
float RTplayerShipX = (SeaX/scale) + zeroX;
return RTplayerShipX;
}
float getRTplayerShipZ()
{
float zeroZ = MakeFloat(worldMap.zeroZ);
float SeaZ = stf(pchar.Ship.Pos.z);
int scale = WDM_MAP_TO_SEA_SCALE;
if (worldMap.island == "Cuba1" || worldMap.island == "Cuba2" || worldMap.island == "Beliz" || worldMap.island == "SantaCatalina"
|| worldMap.island == "PortoBello" || worldMap.island == "Cartahena" || worldMap.island == "Maracaibo"
|| worldMap.island == "Caracas" || worldMap.island == "Cumana")
{
scale = 25;
}
float RTplayerShipZ = (SeaZ/scale) + zeroZ;
return RTplayerShipZ;
}
int getRTclosestIsland()
{
float RTplayerShipX = getRTplayerShipX();
float RTplayerShipZ = getRTplayerShipZ();
string sIslandNow = worldMap.island;
float distance = float iDistanceNow = GetDistance2D(stf(RTplayerShipX), stf(RTplayerShipZ),
stf(worldMap.islands.(sIslandNow).position.x),
stf(worldMap.islands.(sIslandNow).position.z));
int nextisland = FindIsland(worldMap.island);
ref rIsland;
string islandTemp;
for (int inum=0; inum<=26; inum++)
{
rIsland = GetIslandByIndex(inum);//makeref(rIsland, Islands[inum]);
islandTemp = sti(rIsland.id);
distance = GetDistance2D(stf(RTplayerShipX), stf(RTplayerShipZ),
stf(worldMap.islands.(islandTemp).position.x),
stf(worldMap.islands.(islandTemp).position.z));
if (distance < iDistanceNow)
{
nextisland = FindIsland(islandTemp);
}
}
return nextisland;
}
tracefilesoff = 0
[script]
debuginfo = 1
codefiles = 0
runtimelog = 1
void ChangeSeaMap()
{
DeleteSeaEnvironment();
EmptyAllFantomCharacter();
EmptyAllFantomShips();
wdmEmptyAllDeadQuestEncounter();
pchar.location = "";
PGG_DailyUpdate();
Siege_DailyUpdate();
wdmUpdateAllEncounterLivetime();
Flag_Rerise();
worldMap.playerShipX = getRTplayerShipX();
worldMap.playerShipZ = getRTplayerShipZ();
worldMap.playerShipAY = getRTplayerShipAY();
int nextisland = getRTclosestIsland();
ref rIsland = GetIslandByIndex(nextisland);
worldMap.island = rIsland.id;
ClearAllLogStrings();
ReloadProgressStart();
wdmRemoveOldEncounters();
worldMap.playerInStorm = "0";
wdmReset();
CreateEntity(&worldMap,"worldmap");
worldMap.isLoaded = "true";
worldMap.update = "";
// CreateEntity(&wdm_fader, "fader");
// if(IsEntity(wdm_fader) == 0) Trace("Fader not created!!!");
float fadeInTime = 0.5;
SetSchemeForMap();
PostEvent("EventWorldMapInit", 830);
ReloadProgressEnd();
PostEvent("EventTimeUpdate", 1000);
worldMap.addQuestEncounters = "updateQuest";
wdmLockReload = false;
wdmReloadToSea();
}
int nextisland = getRTclosestIsland();
if (nextisland != FindIsland(worldMap.island)) ChangeSeaMapNew();
RUNTIME ERROR - file: ships\ships_init.c; line: 7
invalid index 44 [size:44]
RUNTIME ERROR - file: ships\ships_init.c; line: 7
function 'InitShips' stack error
RUNTIME ERROR - file: weather\WhrWeather.c; line: 894
missed attribute: maxseaheight
RUNTIME ERROR - file: weather\WhrWeather.c; line: 894
no rAP data
/////////////////////////////////////////////////////////////////////////
/// Barbados (Bridgetown)
/////////////////////////////////////////////////////////////////////////
n = 0;
Islands[n].id = "Barbados";
Islands[n].model = "barbados";
Islands[n].filespath.models = "islands\barbados";
Islands[n].refl_model = "barbados_refl";
Islands[n].locators = "barbados_locators";
Islands[n].visible = true;
Islands[n].LoadGroup.g1 = "IslandShips1";
Islands[n].jungle.patch = "Barbados_jungle";
Islands[n].jungle.texture = "junglesprites";
Islands[n].jungle.scale = 12.5;
//Islands[n].ImmersionDistance = 3500;
//Islands[n].ImmersionDepth = 250;
Islands[n].TexturePath = "BARBADOS";
Islands[n].reload.l1.label = "Bridgetown Port";
Islands[n].reload.l1.name = "reload_1";
Islands[n].reload.l1.go = "Bridgetown_town";
Islands[n].reload.l1.emerge = "reload1";
Islands[n].reload.l1.radius = 300.0;
Islands[n].reload.l1.istown = true;
Islands[n].reload.l1.pic = 0;
Islands[n].reload.l1.tex = "t1";
Islands[n].reload.l2.label = "Bridgetown Fort";
Islands[n].reload.l2.name = "reload_fort1";
Islands[n].reload.l2.go = "Bridgetown_fort";
Islands[n].reload.l2.GoAfterBoard.location = "reload_1";
Islands[n].reload.l2.emerge = "sea";
Islands[n].reload.l2.radius = 600.0;
Islands[n].reload.l2.fortname = "fort_Bridgetown";
Islands[n].reload.l2.colonyname = "Bridgetown";
Islands[n].reload.l2.fort.model = "Barbados_fort1";
Islands[n].reload.l2.fort.locators = "barbados_fort1_locators";
Islands[n].reload.l2.pic = 1;
Islands[n].reload.l2.tex = "t1";
Islands[n].reload.l3.label = "Mayak2";
Islands[n].reload.l3.name = "reload_2";
Islands[n].reload.l3.go = "Mayak2";
Islands[n].reload.l3.emerge = "sea";
Islands[n].reload.l3.radius = 300.0;
Islands[n].reload.l3.pic = 1;
Islands[n].reload.l3.tex = "t1";
Islands[n].reload.l4.label = "Shore4";
Islands[n].reload.l4.name = "reload_3";
Islands[n].reload.l4.go = "Shore4";
Islands[n].reload.l4.emerge = "sea";
Islands[n].reload.l4.radius = 300.0;
Islands[n].reload.l4.pic = 1;
Islands[n].reload.l4.tex = "t1";
Islands[n].reload.l5.label = "Shore5";
Islands[n].reload.l5.name = "reload_4";
Islands[n].reload.l5.go = "Shore5";
Islands[n].reload.l5.emerge = "sea";
Islands[n].reload.l5.radius = 300.0;
Islands[n].reload.l5.pic = 1;
Islands[n].reload.l5.tex = "t1";
// Islands[n].net.deathmatch.l1..lxx - deathmatch and team deathmatch locators
// Islands[n].net.convoy.l1..l2 - defend convoy(l1 start point)
// Islands[n].net.fort.l1..lxx -
// boal 16.04.04 -->
Islands[n].Trade.Export.id1 = GOOD_SANDAL;
Islands[n].Trade.Export.id2 = GOOD_WEAPON;
Islands[n].Trade.Export.id3 = GOOD_COFFEE;
Islands[n].Trade.Export.id4 = GOOD_OIL;
Islands[n].Trade.Export.id5 = GOOD_POWDER;
Islands[n].Trade.Export.id6 = GOOD_SUGAR;
Islands[n].Trade.Export.id7 = GOOD_PAPRIKA;
Islands[n].Trade.Export.id8 = GOOD_MOLASES;
Islands[n].Trade.Export.id9 = GOOD_GIN;
Islands[n].Trade.Export.id10 = GOOD_SOAP;
Islands[n].Trade.Export.id11 = GOOD_ALMONDS;
Islands[n].Trade.Import.id1 = GOOD_CINNAMON;
Islands[n].Trade.Import.id2 = GOOD_FOOD;
Islands[n].Trade.Import.id3 = GOOD_BRICK;
Islands[n].Trade.Import.id4 = GOOD_FRUITS;
Islands[n].Trade.Import.id5 = GOOD_PLANKS;
Islands[n].Trade.Import.id6 = GOOD_COPRA;
Islands[n].Trade.Import.id7 = GOOD_ALE;
Islands[n].Trade.Import.id8 = GOOD_COPPER;
Islands[n].Trade.Import.id9 = GOOD_GINGER;
Islands[n].Trade.Import.id10 = GOOD_NUTMEG;
Islands[n].Trade.Contraband.id1 = GOOD_LINEN;
Islands[n].Trade.Contraband.id2 = GOOD_CHOCOLATE;
Islands[n].Trade.Contraband.id3 = GOOD_SAILCLOTH;
Islands[n].Trade.Contraband.id4 = GOOD_CLOTHES;
Islands[n].Trade.Contraband.id5 = GOOD_FLAX;
// boal 16.04.04 <--
Islands[n].InterfaceTextures.t1 = "battle_interface\moor_7.tga";
Islands[n].InterfaceTextures.t1.h = 4;
Islands[n].InterfaceTextures.t1.v = 1;
SendMessage(&locator,"le",LM_LOCATE_I,&Islands[n]);
int FindLocation(string id)
{
/*
for(int i = 0; i < nLocationsNum; i++)
{
if(Locations[i].id == id)
{
return i;
}
}
return -1;
*/
return NativeFindLocation(&locations, id);
}
/*void locCameraSetRadius(float fRadius)
{
SendMessage(&locCamera, "lf", MSG_CAMERA_SET_RADIUS, fRadius);
}
*/
/*
void LocationTestProcess()
{
SetReloadProgressBackImage("Loading\initialization.tga.tx");
ReloadProgressStart();
LocationInit();
Locations_TestAll();
ReloadProgressEnd();
}
*/
bEnableIslandSailTo = false;
locations[n].reload.l30.autoreload = "0";
locations[n].reload.l30.autoreload = "1";