map-pin Constructor Guide Part 3: Exporting and Loading Your Interior

  • Nockess
  • Nockess's Avatar Topic Author
  • Offline
  • Respected Marbler
  • Respected Marbler
  • Cheater Supreme
28 Jan 2023 00:36 - 30 Jan 2023 15:56 #1 by Nockess
Welcome back to the Constructor guide. If you’ve followed from the very beginning, you’ll have learned about Constructor’s interface and built your first project.

This part of the guide will cover exporting and loading in the level you just made into the game.

Before anything, there’s a necessity to mention malformed brushes quickly. A malformed brush will have a very obvious red line going through the middle of it. It is truly difficult to miss. In most cases (the exception explained in a moment), it will not be kind to you while you’re converting your map to a .dif file, but all you have to do is delete the brush, and you’re welcome to try and remake that brush, usually using a different method.

Now, time to export. Navigate to your main Constructor folder, and find the level you just made in whatever subfolder you saved it in (if you followed the guide exactly, look in the Gold folder). There are a couple of ways to go about this, depending on your current situation:

Export As DIF (+ DifFix)

This method is generally the most convenient and reliable way to convert to .dif, and it works for both Windows and macOS. However, the main drawback is its lack of cooperation with moving platforms.

If you’re planning to put your interior into PlatinumQuest, use the Export As DIF option in the File menu and look for the .dif in the same place that you saved your .csx or .map file.

If you’re going to vanilla Marble Blast Gold, hit Export As Legacy DIF instead. The extra step you’ll need to do is to drag your new .dif on the program called DifFix. A console window will pop up for a moment and prompt you to close it right after, and the .dif that you just dragged onto DifFix will now work for vanilla Marble Blast Gold. There is also an alternative method for DifFix: a version can be found on HiGuy’s website, where you drag the .dif file onto the window and it spits out a new version of the file in your downloads.


An alternative method is to use csx2dif. In case you’re not using the copy of Constructor provided in the first part of the guide and you don’t have the exe, RandomityGuy's GitHub page has a download.

The two advantages to this method of converting over the previous is that moving platforms are fully supported, and that it will actually convert malformed brushes. The one downside though is there is (currently) no support for macOS.

Navigate to the folder where you saved your .csx and drag it onto csx2dif. You’ll find a .dif file that appears right next to it which you can copy to your game.


Using Map2Dif, while being the primary method that latest through years and years of level building history, can be a bit of a train wreck.

It’s actually a pretty okay solution if you’re not trying to export super complicated brushes and just sticking to more basic shapes. The two things you want to generally avoid though are unusually large brushes (never a bad idea to split things up, safe to stay under 32 floor tiles or so) and curvy objects like spheres and toruses. Map2Dif does have a history of being a little fragile and unreliable (an understatement in some cases), but again, it was the main way to convert levels for years. It works perfectly well to some extent!

If you are a macOS user trying to convert a level that has moving platforms, this is going to be the method you use.

Map2Dif exporting works the same as csx2dif. Drag your .map file onto map2dif_plus, and copy the .dif file to your game.

Loading An Interior

Interiors go into platinum/data, and then from there, depending on what textures you used to build your level, into interiors_mbg, interiors_mbp, interiors_mbu, or interiors_pq (again, if you followed the guide exactly, hit the Gold folder). In whichever folder you go into, you should find a folder called custom, and that’s where you put .dif file. If such a folder does not exist, you can make one yourself. If you made a level using the extra multiplayer textures, navigate to the data folder and go to multiplayer/interiors/custom.

Now to finally see your level in-game! Open PlatinumQuest, hit Play, select the Custom category, and select the ‘platinum/data/missions folder. The level called “A Custom Level” is the empty mission template, which you’ll want to enter into.

Open the console with ~, and press the button conveniently named “Editor” to activate the level editor. Hit ~ again to close the console, and open the editor with F11.

Open the Camera menu and select Toggle Camera to start flying around. Open the Window menu and select World Editor Creator. That will show the creator menu, where you’ll dive into the Interiors tree view to find your interior and click on it to load it in the level.

Just so you don’t overwrite your Mission Template, hit Save As in the File menu and give your new level a name!
Everything from there is all about the level editor. The rest of this guide continues to only cover working in Constructor, but a new shiny guide Level Editor guide is on the way,

Even though you have your cool new level in the game, there's one more thing to cover to make it look just a bit nicer.

Previous Part: Basic Building and Polishing

Next Part: Ramp Trim

Call me Chris!

Discord: Nockess#4107
Custom Levels:
Last edit: 30 Jan 2023 15:56 by Nockess. Reason: RandomityGuy's csx2dif
The following user(s) said Thank You: Robert, Ignas, Doomblah, CylinderKnot

Please Log in or Create an account to join the conversation.

  • HiGuy
  • HiGuy's Avatar
  • Offline
  • Lead Developer
  • Lead Developer
  • PQ Developer Emeritus
28 Jan 2023 09:09 #2 by HiGuy
Protip: in PQ you can use Level Select -> Menu -> Editor -> Create New to get a wizard for creating new levels. It's a little clunky but it'll do an interior test for you and let you pick some info fields.

Ask RandomityGuy about floating point, bonus points if you tell him "x87".
function clientcmd12dothepq() {
    commandToClient(LocalClientConnection, '34onthedancefloor');

Please Log in or Create an account to join the conversation.

Moderators: Doomblah