• New Horizons on Maelstrom
    Maelstrom New Horizons


    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!

Fleets

Sadly the fleets are indeed invisible on the worldmap (you only get text messages), but everything else: yup! <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/smile.gif" style="vertical-align:middle" emoid=":)" border="0" alt="smile.gif" />
I've been wracking my brains trying to come up with a way to make them visible, but I've not thought of anything yet--I mean, we can add geometry on /load/ worldmap, but there's no way to reposition it without reloading the map.
Well, maybe once a day refresh the map? Better than nothing at all.
 
<!--QuoteBegin-NathanKell+May 3 2005, 10:20 PM--><div class='quotetop'>QUOTE(NathanKell @ May 3 2005, 10:20 PM)</div><div class='quotemain'><!--QuoteEBegin-->Sadly the fleets are indeed invisible on the worldmap (you only get text messages), but everything else: yup! <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/smile.gif" style="vertical-align:middle" emoid=":)" border="0" alt="smile.gif" />
I've been wracking my brains trying to come up with a way to make them visible, but I've not thought of anything yet--I mean, we can add geometry on /load/ worldmap, but there's no way to reposition it without reloading the map.
Well, maybe once a day refresh the map? Better than nothing at all.
<div align="right">[snapback]103745[/snapback]</div><!--QuoteEnd--></div><!--QuoteEEnd-->

<img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/bow.gif" style="vertical-align:middle" emoid=":bow" border="0" alt="bow.gif" /> <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/bow.gif" style="vertical-align:middle" emoid=":bow" border="0" alt="bow.gif" /> <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/bow.gif" style="vertical-align:middle" emoid=":bow" border="0" alt="bow.gif" /> We should rename this guy to <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/type_1.gif" style="vertical-align:middle" emoid=":nk" border="0" alt="type_1.gif" /> instead of god2, but then again, that´s much the same <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/icon_mrgreen1.gif" style="vertical-align:middle" emoid=":cheeky" border="0" alt="icon_mrgreen1.gif" />

[edit] <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/blush.gif" style="vertical-align:middle" emoid=":eek:ops" border="0" alt="blush.gif" /> I didn´t notice NK alread has a smiley named after him.
 
No. In fact, the changes are pretty major, and speed is of the essence so a toggle may not be realistic (because it'd entail running an if() umpteen times a second, rather than straight code--but I don't know what speed penalty that'd really make, so never mind).
Eh. I'll see what I can do.

Grimm: <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/blush.gif" style="vertical-align:middle" emoid=":eek:ops" border="0" alt="blush.gif" /> I'm no god, believe me.
But thanks. :]
{And Cat, thanks again for that smilie--it's perfect! Just the right amount of glee in coding madly...}
 
While trying to understand this code I'm wondering why you're posting the wdmUpdateFleetEvent recursively. Could that be replaced by a function call?
I don't quite get behind how the parameters to the PostEvent get fetched with the GetEventData. (It posts 150, "l1", an index plus a pass number, but only fetches the last two?) Could you explain how that works? And what's the difference between Event and PostEvent ? <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/dunno.gif" style="vertical-align:middle" emoid=":shrug" border="0" alt="dunno.gif" />

Oh, and <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/dev.gif" style="vertical-align:middle" emoid=":d:" border="0" alt="dev.gif" /> again ...
 
POTC pauses all engine-side execution while evaluating a function. One way to get around this is to do small chunks of script every few milliseconds, so it -appears- smoother. (They did it with store updates, which game me the idea).

Event handlers work like this.
First, you set up an event handler, either via #event_handler("eventname", "functorun_on_event") preprocessor directive, or SetEventHandler() call. The latter kind you can delete with DelEventHandler().

Most engine-side things that happen trigger events (i.e. clicking, hitting a key, etc).

You can also may an event occur with the script, via Event() or PostEvent().
The difference is that Event() makes the event occur right then, whereas PostEvent() allows a delay (given in ms).
In keywords.c the various arguments are described (which I'll email you, you may not have it), but they work like this:
Event(string eventname, string params_to_come, param1, param2, etc)
Postevent adds a float delay after eventname and before paramstocome.
Paramstocome is a string telling the engine what variables you will be passing.
l (lower case L) means int.
s means string
f means float
i means aref
e means entity (or object)
a means aref entity? (used in Sea AI sendmessages).

Once an event is run, it finds the appropriate function and calls that.
Then in the function you get the variables via GetEventData() calls.
I.e.
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->#event_handler("helloworld", "helloworld_func"); // yes it gets a;

// then, in some function:
PostEvent("helloworld", 150, "ls", 5, "Hello World");

void helloworld_func()
{
    int numtimes = GetEventData();
    string printstr = GetEventData();
    for(int i = 0; i < numtimes; i++) trace(printstr);
}<!--c2--></div><!--ec2-->
And it will, after a 150ms delay, output "Hello World" five times.
-=-=-
<img src="http://forum.piratesahoy.net/style_emoticons/default/dev.gif" border="0" class="linked-image" /> ?

EDIT: caught a major error. The function is helloworld_func, not helloworld.
 
Update. e is a straight ref.
i.e. sendmessage(&someobj_we_are_sending_message_to, "la", message_to_send, &variable_to_be_changed);

a is the entity and i is the aref.
 
Whoops, I went and wrote that the function was helloworld_func, and then wrote void helloworld().
It should be void helloworld_func(), and is now so corrected.
Sorry. <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/blush.gif" style="vertical-align:middle" emoid=":eek:ops" border="0" alt="blush.gif" />
 
An overview of how fleets are implemented.
The following section is nuts-and-bolts; the meta details on how they're implemented comes later.

We add two objects, an object array fleets[MAX_FLEETS] and an object wdmgrid.
Because POTC does not support two-dimensional arrays, I have implemented the boxes as an attribute tree array under wdmgrid to allow for the two-dimensionality.
(MAX_FLEETS = 32)
There is the structure:
wdmgrid.boxes
then wdmgrid.boxes.0.0 through WDMGRID_NUM-1 in each (currently 40, so
wdmgrid.boxes.39.39)
Note that POTC uses Z as the depth axis, not Y (Y is height), so I use X and Z for the coordinates when dealing with boxes and fleet position (as did the worldmap in dealing with island positions).

Each box has the following fixed properties:
(bX is the box number in the x axis and bZ is the box number in the z axis.)
wdmgrid.boxes.(bX).(bZ).x = bX;
wdmgrid.boxes.(bX).(bZ).z = bZ;
wdmgrid.boxes.(bX).(bZ).index = bX+","+bZ;

For example, box 13,15 is:
wdmgrid.boxes.13.15.x = 13;
wdmgrid.boxes.13.15.z = 15;
wdmgrid.boxes.13.15.index = "13,15";

The init code that create all those boxes is done without loops (all 263kb of it) because there is such a speed hit for using loops--in fact all those 1600 boxes are created in only a second or two at most, vs. probably 60 seconds to create the old 400-box array.

There are a number of box handling functions:
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->//gets box from wdmap coords
aref wdmGetBoxFromCoords(float x, float z);

//gets box index from coords
string wdmGetBoxIndexFromCoords(float x, float z);

// gets wdmap coords from box index--the center of the box.
void wdmGetCoordsFromBoxIndex(string boxid, ref x, ref z);

//gets box by box coords
aref wdmGetBox(int x, int z);

//gets box by index
aref wdmGetBoxFromIndex(string idx);

//are the boxes the same?
bool wdmCompareBoxes(aref box1, aref box2);<!--c2--></div><!--ec2-->


Fleets[] is a traditional object array, with each instance having curfleet.index and curfleet.id. If the fleet is not used, the id is "blank" (that is to say, curfleet.id = "blank"; not curfleet.id = "";)
We also track FLEETS_QUANTITY, so we don't have to page through the entire array on updates.
Because any fleet may be removed at any time I have implemented some clearing/cleaning/sorting functions. However the tricky part is that a fleet may be cleared _while updating the fleets array_, and we update the fleets array in passes. Therefore we need a way to clear it, but not replace it with a later fleet until after that fleet has been updated.

There are the basic three obj-array handling functions: ref wdmGetFleet(int idx); int wdmGetFleetIndex(string id); ref wdmFleetFromID(string id);
Then there are the other functions:
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->// will clear slot idx in Fleets[], replacing it with a non-blank fleet now if sortnow, else queuing that for later.
void wdmClearFleetSlot(int idx, bool sortnow);

// takes blank fleet slot and fills with the last nonblank fleet. Returns false if all later fleets are now blank.
bool wdmFillBlankSlot(ref curfleet);

// if we've queued blank fleets for later filling, do that now
void wdmCleanFleets();

//sorts fleets to remove blank slots -- should hardly ever be run because we refill whenever we delete.
void wdmSortFleets();<!--c2--></div><!--ec2-->
---------------------------------
Then there are the fleet creation and update functions, and here I'll talk about how they're implemented in the non-nuts-and-bolts sense.

Fleet creation.
---------
Fleets have the following attributes:

curfleet.id - if a randfleet, a generated ID; else what you make it
curfleet.nation - nation of the fleet
curfleet.origin - the name of the origin of the fleet, either mapedgeXZ or town id.
---mapedge01 is up, 10 is right, 00 is down, and 11 is left. (This is arbitrary)
curfleet.origin.x - the x coordinate of the origin (random if on a vertical mapedge)
curfleet.origin.z - the z coordinate of the origin (random if on a horizontal mapedge)
curfleet.type - "trade" or "war" or "pirate"
curfleet.RealEncounterType - the index of the encounter template.
---We use the existing Encounter functionality, although somewhat edited--we find an encounter via FindMerchantEncounter() or FindWarEncounter(), check if that encounter allowed by the nation, and if so generate the number of ships it will have.
curfleet.strength - this is where the existing encounter functionality is modded. If strength != 1.0, we decrease proportionally the number of each type of ship recorded by the encounter finder.
curfleet.speed - given as a ratio of player speed. For now always 0.8, but it should be dependent on the ships assigned (or if we only assign specific ships later, a speed for the encounter template).
curfleet.task - the orders for the fleet. Currently allowed are:

<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->FLEET_TASK_RAID  0
FLEET_TASK_CAPTURE    1
FLEET_TASK_PATROL    2
FLEET_TASK_TRADE    3
FLEET_TASK_LEAVE    4
FLEET_TASK_WAIT  5<!--c2--></div><!--ec2-->
---NOTE: WAIT is never assigned as a task during creation, only on update.
---The orders given are determined by some chances (also defined), i.e. chance for a war fleet to go to an (enemy) town (task 0 through 2), if not chance to patrol an empty box (or patrol its home), if not it will leave via a mapedge.
---if merchant, either trade in a friendly town (TRADE) or leave via a mapedge.
---note that if no enemy towns found for war/pirate fleet (and fail patrol test), or no friendly ones for a trade fleet, mapedge will also thus be chosen by default.
---if leaving via a mapedge, task is LEAVE and the mapedge is not the origin (if the origin was a mapedge). Non-edge coord is random.
curfleet.dest - name of the destination (town ID, box index, or mapedge)
curfleet.dest.x - x coord of the destination
curfleet.dest.z - z coord of the destination

then:
curfleet.pos.box - index of the box in which the fleet currently is
curfleet.pos.x - current x coord of fleet (if not updated yet, curfleet.origin.x)
curfleet.pos.z - current z coord of fleet (if not updated yet, curfleet.origin.z)
curfleet.pos.ay - the heading of the fleet in radians. Not assigned until fleet updated.
The fleet is added to box (curfleet.pos.box), as box.fleets.(curfleet.id)

If the fleet is in a box where there is another fleet, or a town, that box is placed in the update queue.
----
Fleet updates.
------------
(update of a fleet is aborted if the player is currently in sea mode and the fleet is in the player's box--that is to say, in sea mode with the player)
1. The fleet's position vs. its destination is checked. If not there yet:
---the distance is checked. If the distance is less than the fleet's speed (as modified by the number of fleet updates per day), the fleet is placed at destination. Otherwise the heading is found, and then on a random chance (1/4 chance for now) the heading is modified by +/-45 degrees (to account for tacking, nav problems, etc.)
----Then the fleet is moved (modified speed) units along that heading. Its box is updated, and if the box changed the fleet's entry in the old box is removed.
------if for any reason the fleet is outside the map, it is cleared.

2. If the fleet is at its destination
---The fleet's task is checked.
----If the task is LEAVE, the fleet is immediately removed.
----If the task is not LEAVE and not WAIT (see below):
------the fleet is set to task WAIT. It is then assigned a post-wait task and destination. For now the post-wait task is always LEAVE and the post-wait destination is always the fleet's origin. If the fleet was given task RAID or CAPTURE, on a frnd() the fleet may be immediately cleared. Otherwise, the fleet is assigned a number of days to wait (well, not days; a number of fleet-updates, and each fleet is usually updated only once per day).
----If the task is WAIT, the current waitdays is checked. If not yet the desired waitdays, the current waitdays attribute is incremented and that's it; otherwise the waittask and wait dest are assigned, and on next update the fleet starts moving again.

3. If the fleet is not cleared (i.e. it is either not at dest, or its task is now WAIT):
----if the fleet's box changed due to fleet movement, the fleet's entry from the old box is cleared, and the fleet is added to the new box. If there is another fleet already there, or there is a town, the box is added to the update queue.
------
Box updates.
-------------
If there are no boxes queued for updating, we don't touch them (see playerbox below)
Otherwise:
----If the player is in that box and we are at sea or on the worldmap, we skip the box
------otherwise we just see what's in the box and do nothing. :]
-Now, if we're on the worldmap we separately check the pchar's box.
---We then output what fleet(s) (minus the player's) and what town(s) are in the box with the player.

Lastly we delete the update queue from wdmgrid.
-------
Update mechanism.
----------------
For now, the updates are handled by a recursing series of postevent() calls on the worldmap, and by straight wdmUpdateFleets() calls if we are adding time via an add time function (addtime() or adddatatocurrent() or something).
The recursing postevents are done to minimize the stutter on the worldmap, or at least to spread it out so everything is slower (rather than normal-stop-normal-stop it's more like 1/2speed-1/2speed-fullspeed-1/2speed-1/4speed and so forth).
The wdmap updates are triggered by adding a check to wdmEvent_UpdateDate() in worldmap_events, NOT the normal wdmNextDayUpdate() that usually gets used.
-----
Sea mode integration.
--------------------
I have either deleted or rewritten the old fantom/encounter code, both in worldmap_reload.c and in sea.c
First, a little bit of background. The function that handles sea mode loading is SeaLogin(), and it gets passed something called a login object. That object is filled with the player group's position, any quest groups, any encounters, and the name of the island (if it exists). In POTC normally only on reloading from worldmap to sea are encounters added to that object (via wdmReloadToSea() ).
I have taken the encounter/fleet code out of that function and placed it in its own function { void wdmFillLoginObjectWithFleets(ref loginobj, float baseX, float baseZ) } at the bottom of worldmap_reload.c
That function is run by SeaLogin() itself, and fills the login object with any fleets in the current box. Note that this means that _any_ time you reload to sea, fleets will be there.
The function loops through all those fleets, assigning group names ("Fleet_" + the fleet's ID), group pos/angle, and task (for now, just MOVE along current heading for everybody).
Because of the aforementioned size limits, I have just now added a section that checks the extents of the positions (i.e. max - min for both X and Y), and if > a define, we do a sqrt of position and multiply by the sqrt of the define so as to bring the fleets in closer.

Now, in Sea.c when we start loading all those fleets we filled the login object with, we do a check to see if there are any ships/characters already in the fleet.
---If not, we do the traditional fantom creation stuff.
---Then, when we next _leave_ sea mode, we check all groups. If there are any survivors in each fleet/group, we create a tree of curfleet.ships.characters.(fantomID), and copy the entire character object in to that attribute-tree. We also create curfleet.ships.commander and set it to the ID of the fantom with the best ship class.

-So if we _do_ have that tree in the fleet object on loading to sea, we create the appropriate number of fantoms, but then copy the old data back over. We do create a new ID (I didn't do that before and I'm hoping that's why it was (occasionally) crashing on me), and then add the fantom to its group and to sea.
------------------------
So. That's about it.
 
That's a nice reference and very much needed.

<!--QuoteBegin-NathanKell+May 5 2005, 06:32 AM--><div class='quotetop'>QUOTE(NathanKell @ May 5 2005, 06:32 AM)</div><div class='quotemain'><!--QuoteEBegin-->Because POTC does not support two-dimensional arrays, I have implemented the boxes as an attribute tree array under wdmgrid to allow for the two-dimensionality.<!--QuoteEnd--></div><!--QuoteEEnd-->
I'm a bit supicious of that. The CheckAttributes do cost you a lot of time.
Have you tried an array of arrays instead of a 2-dimensional one?
 
Heh. Glad it made some sense, it came out /way/ longer than I thought it would. :]

You mean 40 boxX[40]s? (with X 0-39)?
How would that be implemented?
Getbox(x, z) would have a big switch on x, with case 0 through 39, and return a reference to boxwhatevertheXis[z]?
 
{echo'd on pre13 thread}
fleets050504.zip is the archive.
Note, fleets is still crashing. Dunno why.
Try uncommenting DeleteAttribute(&curfleet,"ships"); in sea.c and that should fix the crashing (but it turns off the persistence of the fleets).

But I can't do any more ATM, nor will I have a chance to be online until Saturday.

Cheers all. <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/smile.gif" style="vertical-align:middle" emoid=":)" border="0" alt="smile.gif" />

Changelog:
Pieter, thanks again for the merging! Now this finally has the screwface and CCC code.
I added a random locs toggle in BuildSettingsCCC.h
Also, you will probably need Screwface's island pack if you don't have a recent version (because he has a couple updated binary files in it)
You'll also need Jack Rackham's new gun and cannon sounds (or turn them off via BS.h toggle).

<!--quoteo--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--quotec-->*changed PGMUS to MUSICSCHEME, fixed handling. Now can add a string to end of music alias, and set MUSICSCHEME to that, and it will be handled (i.e. add a duplicate of music_alias's aliases as "music_XYZ_PGMUS", set MUSICSCHEME to "_PGMUS", and it will use that music).
*fix LAi_NPC_Equip to use chr's rank if passed 0 or -1 for rank.
*add func string FillStringFromAttributes(aref attr) which will output the names of all the top-level attributes of attr.
*added fix to giveitemtotrader to skip pchar.
*added Gr_f_officer and greetings for female officers
*dungeons count as boarding for officer-follow checking.
*added SubtractString() function. Will subtract specified string from base string, either first instance or all instances.
*changed Fantom_SetCharacterGoods() to actually set, not add. For where adding is needed, switched to AddCharacterGoods().
*reorganized console.c and added labels and functions to ease debugging.
* added JRH gunsounds
* added wdmap/islands interop when wdmap island name != island id.
-----
* Screwface: Add KR jungle support to animals.c
* PB formatting in BS.h
* Char_events.c add some secret chests. SF or CCC?
* SF add chars for Hisp, Turks.
* PB change forward/back to WS, add equip to BI controls
* SF add new islands to KAM berthing
* SF add new island reloads for locs to islands_init
* SF in itemsLogic make some boxes for locators
* SF add override false to landencs monsters to loc id Turks_shore_ship
* SF locs_init add Turks, Hisp.
* Add technique case for KR in locs_loader (SF?)
* add rld and goto to mchr group in locs_loader (CCC, probably)
* SF add turks Store to store.h, store_init, storename
* SF add three towns, Port-au-Prince, Tortuga, Grand Turk.
* SF change small_islands define in pictures
* CCC char events new locators and treasure spots
* CCC random locs
* CCC enC_Bandit, Enc_Officer dlg changes
* CCC sneakmod to LEnc_ and LAi_monsters.
* CCC change cittype to always dlg false
* CCC sneakmod change guardian to patrol
* CCC patrol actually patrols in dungeons/forts
* CCC loc\oxbay expanded locs
* CCC locinit new locs, set off hearradius 0.5
* Changed Box_OnLoadLocation to add func Box_FillBox() rather than doing it inside the former. Means code need not be duplicated for ScrewFace.
* changed lai_citizen candialog to not always return false--if it does, it kills ALL citizen dialog...
* add function void DoDailyUpdates(string mask).
* added back old questbook functionality.

* ******NOTE! If you add something to the NextDay handler--or to wdmap's day update--you MUST addit to calendar.c's DoDailyUpdates.*******

* now doing wdmap updates only on nextday, but spread out through day.
* WDMAP reload to sea STILL CRASHES sometimes (on reload persistent fleet).<!--QuoteEnd--></div><!--QuoteEEnd-->
 
<!--QuoteBegin-NathanKell+May 5 2005, 08:06 AM--><div class='quotetop'>QUOTE(NathanKell @ May 5 2005, 08:06 AM)</div><div class='quotemain'><!--QuoteEBegin-->You mean 40 boxX[40]s? (with X 0-39)?<!--QuoteEnd--></div><!--QuoteEEnd-->
I had been hoping you could make an array of objects and fill it with one-dimensional arrays, but it’s not working.

However we can just use a one-dimesional array of size (rowsize * colsize) and access an element (x, z) with index [x * rowsize + z]. (That’s how C does it internally anyway.)
Have been trying that , and it’s much faster than with the attribute tree. I’ll get the code to you by mail for checking, maybe it’s all nonsense, but it’s FAST.
 
<!--QuoteBegin-NathanKell+May 8 2005, 02:39 AM--><div class='quotetop'>QUOTE(NathanKell @ May 8 2005, 02:39 AM)</div><div class='quotemain'><!--QuoteEBegin-->That's how POTC handles nation2nation relations, too.
<div align="right">[snapback]104418[/snapback]</div><!--QuoteEnd--></div><!--QuoteEEnd-->

<img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/modding.gif" style="vertical-align:middle" emoid=":modding" border="0" alt="modding.gif" /> I almost forgot about that one, in all my euphoria about fleets and cannons. There´s so much to keep track of <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/poet.gif" style="vertical-align:middle" emoid=":hmm" border="0" alt="poet.gif" /> , I´ll need a secretary or two only to keep up to date...

It would be great if we could get changing nation relations into the B13 as well, so we´ve got that issue wrapped up with the other great changes. Then we have a really big reworked gameplay for build 13.
 
Heh, yeah. It _is_ getting rather complex.
And interrelated: the town bone connected to the fleet bone, the fleet bone connected to the nation bone, etc. <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/laugh.gif" style="vertical-align:middle" emoid="xD:" border="0" alt="laugh.gif" />
That is to say, that unless we want a purely random national relations backend, we need to tie it to national strength, which is tied to economy and fleet.
 
Oh, for starters, I´d be rather content with random changing relations. After all, it´s not in the Caribbean where decisions on war and peace are made, but in Europe, so to the average Carribean inhabitant, those actually might seem random. Some things you just you <i>can´t</i> influence, like age, weather and politics - although I´m not so sure about weather and age <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/wink.gif" style="vertical-align:middle" emoid=";)" border="0" alt="wink.gif" />
 
Is the fleet-mod going to be in Build 13 for sure. And will it override the current way encounters are handled (with the toy ships)? Because with the fleets, you'll just have to hope you do or don't run into some ships, which might be particularly annoying if you are wanting to sink all French ships you can find (what I'm usually wanting to do <img src="http://www.piratesahoy.com/forum/style_emoticons/<#EMO_DIR#>/dev.gif" style="vertical-align:middle" emoid=":d:" border="0" alt="dev.gif" /> ). And, with the fleets, the fleets are doing things that make sense, like sailing from island to island or something. Only you don't see them, so you don't see that it makes sense. Just a few random thoughts. Do with it as you please.
(If turning it off in BS.h causes the code to be slower, maybe you could make different files that you can overwrite the originals with if you don't want fleets. That wouldn't require BS.h settings, right?)
 
Back
Top