An open library of RPG Maker MZ plugins, powered by the community.

PGMZ - The Community-Driven Plugin Library for RPG Maker MZ

MZ plugins

Sailing as a simulation: points of sail, cargo weight, and ports that glut when you land - VoyageCore.js

Plugin desc : The wind has a direction and a strength, and your heading against it decides your speed — so a dogleg course can genuinely beat a straight line.

License :
・Copyright: Retained
・Commercial Use: Allowed
・Modification: Allowed
・Redistribution: Prohibited (This does not apply to works made using the material.)
・Details: See Download Page / In-plugin documentation

Author : CSAF — Core Systems Asset Factory

Website : https://csaf.itch.io

Desc page : https://csaf.itch.io/voyage-core

File name : VoyageCore.js

Help of plugin :

============================================================================
Voyage Core — the sea is not a loading screen
============================================================================

RPG Maker has a boat, a ship and an airship. They are teleports with a
sprite: you board, you steer, you arrive, and nothing about the passage
mattered. Every travel plugin on the market makes that faster. None of them
makes it a *journey*.

Voyage Core is the journey. The wind has a direction and a strength. Your
heading relative to it decides your speed, which means a dogleg course can
genuinely beat a straight line. A full hold is slow. Fruit rots. Storms take
the hull and sometimes the cargo. And when you finally land two hundred tons
of grain somewhere, that somewhere has two hundred tons of grain now, and its
price says so.

THE FIVE IDEAS
--------------
  POINTS OF SAIL   Your speed depends on the angle between your heading and
                   the wind. Straight downwind is NOT fastest — across the
                   wind is. Straight upwind is impossible; you must tack.

  THE HOLD         Cargo has weight, and weight costs speed. Capacity is a
                   real decision, not an inventory cap.

  KEEPING TIME     Perishable lots age every watch. A fast passage is worth
                   money, which is what makes the wind matter.

  WEATHER          Derived from the same wind field that drives your speed,
                   so a storm is not a random interruption — it is the wind
                   you were already sailing, grown too strong to carry.

  PRICE PRESSURE   Landing goods gluts the port you land them in, and the
                   glut fades over time. Trade routes wear out.

HOW TIME WORKS
--------------
The simulation steps in WATCHES (four hours by default). Conditions are
drawn once per watch and hold steady until the next one, which is what makes
a voyage reproducible: the same seed and the same course always produce the
same passage, on every machine and in every save file.

The chart animates smoothly between watch boundaries. It is interpolating a
simulation that has already been decided, never rolling dice per frame.

GETTING STARTED
---------------
  1. Add two or three ports in the Ports parameter. Chart coordinates run
     0-1000 across and 0-750 down; that is the chart, not your map.
  2. Load some cargo with the Load cargo command.
  3. Call Open the sea chart.
  4. Pick a departure port, pick a destination, add waypoints if you want to
     work the wind, then sail.

WORKING WITH OTHER PLUGINS
--------------------------
Voyage Core touches four core methods, all by prototype extension with the
original saved and called. It never replaces one outright:

  Game_System.prototype.initialize      creates the record
  Game_System.prototype.onAfterLoad     drops the runtime wrapper
  DataManager.makeSaveContents          drops the runtime wrapper
  Scene_Map.prototype.createDisplayObjects   (VoyageChart, optional badge)

Nothing else in the engine is patched, so it sits beside battle systems,
menu replacements and message plugins without argument.

SAVE COMPATIBILITY
------------------
The voyage record is stored as a plain object on $gameSystem, versioned, with
a migration path. Removing this plugin later leaves a save that still loads —
the record simply becomes an unread property. There is no live object in the
save file, ever.

SCRIPT ACCESS
-------------
  $gameVoyage.isSailing()             true while a passage is running
  $gameVoyage.lastResult()            the outcome record of the last passage
  $gameVoyage.cargoTons()             total tons in the hold
  $gameVoyage.hull()                  0-100
  $gameVoyage.priceFactor(portId, cargoId)
                                      1.0 = untouched. Below 1 = glutted.
  VoyageCore.windAt(seed, watch, out) the wind field itself, for your own use

The price factor is the seam other economy plugins read. If Bazaar Core is
installed it is picked up automatically; if not, the number is still there
for your own shop events to use.

============================================================================
Terms
============================================================================
One licence per developer. Use it in as many of your own games as you like,
commercial or free. Edit it freely. Do not resell or redistribute the plugin
itself. Credit is welcome and not required.

RPG Maker gives you a boat, a ship and an airship. All three are teleports with a sprite: you board, you steer, you arrive, and nothing about the passage mattered. Every travel plugin on the market makes that faster. None of them makes it a journey.

Voyage Core is the journey. The wind has a direction and a strength, and your heading relative to it decides your speed. Straight downwind is not fastest — across the wind is, and straight upwind is impossible, so you tack. A dogleg course can genuinely beat a straight line. A full hold is slow, because cargo has weight and weight costs speed, which makes capacity a real decision rather than an inventory cap.

Perishable lots age every watch, so a fast passage is worth money — that is what makes the wind matter rather than just look nice. Weather is derived from the same wind field that drives your speed, so a storm is never a random interruption; it is the wind you were already sailing, grown too strong to carry. And when you finally land two hundred tons of grain somewhere, that port has two hundred tons of grain now and its price says so. The glut fades over time, so trade routes wear out.

The simulation steps in watches (four hours by default). Conditions are drawn once per watch and hold steady until the next one, which is what makes a voyage reproducible: the same seed and the same course always produce the same passage, on every machine and in every save file. The chart animates smoothly between watch boundaries — it is interpolating a simulation that has already been decided, never rolling dice per frame.

On compatibility: Voyage Core touches four core methods, all by prototype extension with the original saved and called. It never replaces one outright, so it sits beside battle systems, menu replacements and message plugins without argument. The voyage record is a plain versioned object on $gameSystem with a migration path — remove the plugin later and the save still loads, the record simply becoming an unread property.

Where to get it: the itch.io page linked above, which shows the current price. The plugin is paid. The download ships readable, unobfuscated JavaScript — no minification — plus a LICENSE.txt. Commercial use in your games is permitted; redistribution of the plugin source itself is not, which is why this entry links to the plugin rather than hosting the file.

AI disclosure: the code and the store images for this plugin were generated with AI assistance, and this is disclosed on the itch.io listing as well.

Note on the help text below: this site strips angle-bracket characters from submitted text. Voyage Core’s help happens to use none, so the block below is reproduced exactly as it ships inside the plugin.

スポンサードリンク

-MZ plugins

Copyright© PGMZ - The Community-Driven Plugin Library for RPG Maker MZ , 2026 All Rights Reserved.