I wanted to play Corsairs on my Mac. It got a little out of hand

I wanted to play Corsairs: City of Abandoned Ships on my Mac. Wine had compatibility problems. I started investigating them, then wanted to change a few things in the game itself. About two months later, that became my own remaster.

I worked with AI agents, mainly on GPT-5 Sol, alongside Gemini and other models. I estimate that work at roughly $10,000–$20,000 in OpenAI API-equivalent costs. The project kept the familiar pirate world and gained a native renderer, gameplay changes and a separate ship-drifting mode.

The base is GPK 1.3.2 AT with ReConstruction 1.4.1: the familiar islands, ships, characters and story. My version runs as a standalone app on Apple Silicon with macOS 15 or newer. Playing it needs no Wine, Xcode or dependency setup.

New Game, Load Game and Settings in a candlelit captain’s cabin.

There were ships. There was no sea

After trying Windows compatibility and translated graphics, I moved to my own Metal renderer. The first prototype drew land, ships and the interface. The sea was missing. Fairly noticeable in Corsairs.

I had to work through water reflections, refraction, foam and depth color. Then shadows, particles, vegetation and animation. Moving animation to the GPU even touched collision handling: that still needed geometry on the CPU.

A sailing ship, coastal fort and their reflections in the water.

Porto Bello had water and palm shadows, but the ground looked blurry. At night the lamps worked, while finding a path between them was difficult. Fix one thing, go looking at the next.

On the sea islands, I replaced flat tree cards with full trees sharing wind and shadow shaders. Placement follows soil, slopes, coastlines and buildings. The forest looked too sparse after the switch, so I increased placement density without raising the number of trees visible in a frame.

Sand, shallow water and palm shadows by day; a lamp-lit pier after dark.

Where did the ground go?

I also reworked dock timber, decks, sand, rocks and palms. The textures needed care: move the planks inside an atlas and an old model maps them onto the wrong surfaces.

Sand and pier timber
Palm leaves and bark
Original and reworked sand, pier timber, palm leaves and bark.

Some missing surfaces came back without new textures at all. Twelve files ending in .tga were actually DDS. The old loader recognized their contents; the new one trusted the extension. Fixing container detection brought back Willemstad's ground, fort and shipyard.

Where am I actually shooting?

The original gold ring showed where I was looking. I found out where the broadside would meet the enemy hull after firing.

I made an aiming outline that sits on the scene: red on the ship, white on the water. Pick a section of hull, adjust the course and wait for the shot. Dispersion and range still apply; there's no target lock.

Flat aiming ring
Surface aiming contour
A gold ring over the deck view; a red contour across a target hull and a white outline on the water.

I added 1×–5× zoom. A short right click switches between the ends; holding lets me stop in between. The spyglass stays a separate item.

A red aiming contour across the nearer ship and a white outline on the water.

One cannon works too

I can now fire a single gun or a broadside. Each cannon keeps its own charge and reload; switching the mode doesn't reset them.

I added a fifth charge: shrapnel bombs that burst near a target. Charges have different spread and reload costs. Chain shot works on rigging; shrapnel goes after exposed crew.

Image will appear later

Four ships, the same chores four times

Once I had a squadron, I noticed how many services stopped at the flagship. Food, rum, medicine, repairs and crew rest now cover accessible companion ships. Supplies and money are real; nothing appears from nowhere.

Aboard the squadron
Shore leave
Companion ships beyond the deck rail, followed by shore leave in Fort-de-France.

Officers can replenish ammunition and medicine from the cabin chest and take better ordinary equipment. Quest items and suitable gear I equipped by hand stay protected.

Treasurer, please remember this order

I can set target quantities of food, powder, bombs or planks for each ship once. The treasurer fills them from the available money, shop stock and hold space. A damaged prize and a fighting flagship need different orders.

Cargo orders for Walcheren
Grapeshot target
Walcheren’s cargo orders and a grapeshot target set to 400.

Boarding loot got the same treatment. I choose sale categories, copies to keep and protected items, then inspect the preview. Quest items and personal equipment stay out of the sale.

The blunderbuss and blades are kept; three of four sapphires are selected for sale.

One conversation can collect cabin-chest loot into the flagship chest, or I can search it myself. Buying and selling are separate services I enable in a suitable port. Loading a save doesn't sell anything by itself.

My captain grew. His health barely did

My captain had 110 maximum HP at rank 18. I reworked health growth and the officer limit so development and skills matter alongside the starting stats. Early skill progression takes fewer repetitions too.

A healthy captain can no longer die to one firearm hit: damage is capped at 49% of maximum health. An injured captain can still be finished off. More officers still mean wages and loyalty to manage.

Who told on me?

Attack a ship and it fights back immediately. Wider consequences depend on the news getting out. Survivors, another ship, a fort or my own crew can report it. A witness can recognize the flag without identifying the captain; changing colors doesn't erase known history.

Debt, morale and skills affect the crew's behavior. A direct witness still counts. Ordinary character conversations also gained an attack option, with quest scenes protected.

Sometimes surrender makes sense

I added surrender to the authorities as an alternative to fighting to the death. The captain can be jailed, fined and have equipment held. Prison has activities and relationships; release returns the gear. If they transfer him, the squadron doesn't stay forgotten on another island.

The captain beside a seated cellmate and wooden bunks.

Tobacco pays well. How much fits?

I split price, profit per weight, cargo plan and expected income in the trade journal. Goods can be compared by the space they take in the hold. Prices come from known information; the next port can still ruin a lovely calculation.

Providencia to Belize: prices per 100 kg and a planned tobacco cargo.

Just walking around my ship

I can walk onto the deck while sailing or fighting, with the sea still running. Walk, run, use the spyglass, steer and fire. Collision handling covers the hard parts of the ship; I removed separate crew avoidance because of its extra cost.

The captain at the wheel, with sailors on the deck below.
The captain and sailors on deck, with rain and mountains beyond the rail.

Sail around the rain

I connected weather on the chart and in the local sea. Fronts travel with the wind; rain starts and ends gradually. Clouds can stay after a shower. Entering a town or a room doesn't generate new weather from scratch.

Image will appear later

Storms now care about my heading and how much sail I carry. Ordinary storm wear stops at a lower condition limit. Cannon fire, tornadoes and tsunamis keep their own consequences.

Damaged sails under rain, with a mountainous coast beyond the ship.

I just need to reach port

Free emergency repair lifts hull and sail condition a little. Material-based repair is faster and reaches a higher limit. Neither returns dead crew or fallen masts.

Masts have a separate repair order in safe water. It needs people, planks and game time. The cost is visible before starting; canceling spends nothing. It can't rebuild all the rigging.

Player capture of a ship on the rising wave beside the fort.

Finding my way at night

The sky, fog, water and outdoor lighting had to work together. I worked on the horizon, lamp shadows and the gaps between lit places. I wanted to keep a night port where I could still tell where I was going.

The captain and a sailor between San Juan’s street lamps, with ship masts behind them.

Seeing San Juan from the sea

In a separate coastal-scene experiment, I placed San Juan's town geometry on Puerto Rico's sea island. I aligned the town and island to the same physical scale, kept the original fort and its guns, and removed extra backdrop districts. The experiment concerns the view of the coast; town visits still use the ordinary location transitions.

Image will appear later

Out of the sea, above my own ship

Leaving for the chart lifts the camera above the flagship. The chart keeps a miniature of my actual ship, including its hull, masts, sails and damage. Returning to sea reverses that path.

Image will appear later

I rebuilt the ship fires

The original game already had ship fires, but I wanted the effect and its consequences to go further. I rebuilt the system: fire starts at a specific point, spreads heat, chars wood and damages sails. Rain helps extinguish it. I can send people to damage control, but those people aren't at the guns. Damage remains after extinguishing and survives a save.

The flame renderer needed its own rules. Changing heat used to shift the entire noise field; camera distance could reset its sampling grid. I separated continuous flame motion from intensity and made sampling change gradually with distance. Heat, fuel and saved damage keep their existing simulation.

Player capture from October 13, 2026; later renderer changes are not shown.

Then my wife suggested phonk

At some point I was tired of the constant fixes. My wife suggested adding phonk and trying ship drifting. That became a separate mode for simply enjoying a sideways run.

Phonk Mode lets a sailing ship drift to music with lilac lighting. Holding Shift takes it up to 1,000 knots and lifts its bow slightly; a tsunami can send it airborne. I control acceleration, braking and turning. Switch it off and ordinary sailing returns.

It also became a place to try nuclear fire. Automatic fire favors weaker charges; holding and releasing fire selects a yield from 1× to 10×. Each explosion keeps one yield for its cloud, shockwave, small tsunami and fire. Its procedural pattern is fixed independently of camera position, so moving the view can't regenerate the blast. A ship hit directly isn't damaged again when the shockwave arrives; destroyed ships retain heat and momentum.

Player capture of the red hull and violet underglow in Phonk Mode.

And one more quest

The Great Recipe starts with Bermuda tavern rumors. Then comes a night encounter with Red Beard, a battle in a whirlpool, captivity and a moonlit bay. This questline is still unfinished. In the meantime, Bermuda merchant Pascal Voisier has a separate dialogue option for 200 shrapnel bombs. The batch is free once every seven game days, provided there is enough space in the hold.

Red Beard · 3D portrait
Red Beard · texture atlas
Spinning heel kick · animation phases
Red Beard’s model portrait and final texture atlas; an offline animation study of the spinning heel kick across six character rigs.

When optimization broke the horizon

An earlier renderer pass removed unnecessary work, but a hybrid-sky experiment left a visible seam at the horizon. Fog faded, while the island and water became too dark against the bright sky. I restored the earlier fog shaders and authored sky, turned the hybrid off, and kept the independent performance changes. I also removed a hull-preparation wait that delayed ships entering a live sea.

Later profiling led me back to CPU work. Crew already had authored walking routes, so I removed material-support queries from every movement update. Cannons, rigging and the hull still check their physical support. The remaining queries reuse their nearest geometry result. Before the first draw, the texture loader now reads DXT1 alpha coverage directly instead of decoding colors it doesn't need.

I experimented with material hull fractures during collisions as well. That path is off by default; ordinary collisions and damage keep their own path. The component optimizations have measured savings, but I have no comparable whole-game FPS measurement.

Image will appear later

You can play it

It became a standalone Mac app. Saves and settings live outside it, so replacing the app doesn't take the captain's progress away. The remaster remains experimental.

Download the Mac build · Source code · Engine source and dependencies

The Russian changelog covers the mechanics, requirements and known limits.