(cheaty) way to cross oceans

cheatsdwarf-fortress-adventure

Crossing oceans in Dwarf Fortress in adventure mode is a tedious and unrewarding task. There is no fast travel, so player has to guide his adventurer across several world map tiles (which are HUGE) manually under the constant threat of advancing ice walls and aquatic predators, while experiencing the huge lag from terrain generation and all the mist calculations. This process cannot be automated with macros, due to aforementioned threats and non-monotonous terrain. While some players may prefer to face this "challenge" as it is, some – like me – are willing to use the help of external programs to avoid spending several hours at this very monotonous task.
Does an exploit, cheat, script or something alike for crossing an ocean exist?

Best Answer

As far as I know, no "download-and-run" scripts for crossing oceans or teleporting large distances exist (yet). However, it is possible to simulate one using DFHack and a few build-in tools.

You will need:

  • DFHack (more information here and here)
  • Scripts reveal, teleport and, my favourite, gui/gm-editor - all are already built-in in latest versions of DFHack (0.43.05-alpha, the latest, works reliably too)
  • Dwarf Fortress (duh!)

Rough idea

We will simply set character's local X and Y coordinates to very high (or very low) values - their overflow is handled correctly (I was very surprised to discover it), so effectively this will result in a long-range teleport. A few extra safety measures will need to be taken.

The detailed algorithm

Preparation

Install DFHack, run the game, open the world. Be sure to run DFHack's executable, not native DF' one - otherwise, it won't get attached to the process. First, a little subroutine to teleport your character whenever you want on local map. Normally, you would do this:

  1. Press z in-game to open character status screen.
  2. Run teleport -showunitid and write down the id it will print.
  3. Run reveal in DFHack console to see where to teleport.
  4. Use look command in-game, position your cursor at the desired position and run teleport -unit your_id_here.

Unfortunately, the teleport -unit command seems to be broken in the latest alpha of DFHack, raising an error if you try to teleport. If it still is at the moment you read this, do the following instead:

  1. Run reveal in DFHack console to see where to teleport.
  2. Use look command in-game, position your cursor at the desired position and run teleport -showpos. It will print the local coordinates of your cursor.
  3. Press z in-game to open character status screen.
  4. Run gui/gm-editor command, select pos property, open it and manually set the coordinates from step 2. Once you close the editor, you'll find yourself teleported.

Algorithm

  1. Let's determine the target coordinates.

    • Open the Quest log and choose the world tile you want to teleport to. It doesn't need to be adjancent to the ocean, nor do you - it is possible to teleport from anywhere to anywhere across the world, although you should target a beach if you want to reduce implications from the cheating to merely crossing the ocean.
    • Take note of the distance between your tile and that target's on both axis - for example, "6 world tiles to the east [right] and 4 to the south [down]" or "4 to the west [left] and 11 to the north [up]".
    • According to the Dwarf Fortress wiki,

      A single world map tile would contain 768x768, or 589824 local tiles.

    So, multiply these distances by 768 and, if necessary, reverse the sign for north and west. East and west correlate to X axis, and north and south to Y axis. It might sound a little confusing, so here are a few examples:

    • "6 world tiles to the east [right] and 4 to the south [down]" becomes +4608 (6*768) for X and +3072 (4*768) for Y;
    • "4 to the west [left] and 11 to the north [up]" becomes -3072 (4*768) for X and -8448 (11*768) for Y;
    • "5 to east and 4 to north" becomes +3840 for X and -3072 for Y;
    • "2 to west and 3 to south" becomes -1536 for X and +2304 for Y.
  2. Teleport yourself somewhere in the caverns below using the aforementioned local teleport subroutine - it is very important to get below the ground. You don't want to end up encased in ice or flying in the midair after the teleport, otherwise it may end very bad. While it is fun, to some extent, it may not be the kind of fun you want. While it is technically possible to survive flying or being encased in ice, it is better to play safe.

  3. Open your character's screen with z, run gui/gm-editor and select the pos property. Add the coordinates from step 1 to X and Y, with respect to signs; leave Z without changes for now. This is where the teleporting happens!
  4. Close the gm-editor screen. A bit of lag (~30 sec.) is expected and your screen should turn completely black, because the place is unrevealed yet. Attention - do not move for now! You might be stuck in a wall, water, or worse. Instead, run reveal command and proceed with aforementioned local teleport procedure to teleport yourself somewhere safe above the ground. Changing only Z coordinate should be enough in most cases.

That's it! You're safe and sound at the desired location now, probably far, far away from where you started. It is possible to teleport more precisely across embark tiles (the ones in Travel screen, aka small map) instead of world tiles, if you want - just multiply by 48 instead of 768.


I'm not sure if it is possible to teleport your companions or other creatures this way; further testing is required. Too large numbers (below -30000 in particular, that's about 39 world map tiles) may cause problems too, although I doubt it will happen. You may want teleport across such large distances in few steps - it's okay to temporarily end up under an ocean, since you are underground anyway - just to be sure.