Foundry:Converting from Roll20

From 5etools Community Wiki
Jump to: navigation, search

Conversion Process

The following is a general overview of the process taken to convert modules so that those looking to do this personally can do so on their own.
When working up worlds, its often best to work either from local session or ensure you have rapid access to the location's filestore to update and test.


Please note that in Foundry the general term for an adventure or Module, is called a WORLD; and the term MODULE in Foundry refers to an add-on; or extension. Plutonium is a Module, Curse of Strahd is a World. If you are coming from Roll20 and used BetteR20, this could be confusing as Module was used to mean an adventure/campaign.




Resources Used

Resources Used

After you've read the instructions and are reasonably comfortable that you can follow them,

YOU ARE ADVISED TO INSTALL THESE PRIOR TO PROCEEDING TO THE CONVERSION

SOME OF THESE ARE PAID TOOLS..

It's best to familiarize yourself with them and their use prior to proceeding to trying this for the first time.


Roll20 Tools:
KaKaRaTo Offers a suite of tools to nearly seamlessly move your Roll20 Content into Foundry. A truly exceptional effort.
(outdated video guide here )
  • R20Converter; which takes those exports and creates a world or compendium file from such into foundry (must be run on the Foundry server).


JSON Editor:
You will need an editor for the code (often JSON); if you do not already have one - please keep it simple.


Image Tool:
To convert and work with the images


Macro Help:
Help converting R20 macros to Foundry VTT macros.
https://github.com/ASLopesJR/r20vttable
Deduplicator Script
https://github.com/trfunk/foundry-deduplicator-webp


Add-On Modules for Foundry
Its advised to have these installed
  • Plutonium
  • The Furnace
  • Automatic Journal Icon Numbers
  • Better Text Drawings (For text labels/drawings multi-line (Effect doesn't require the world run the module but keeps the effect))
  • Context Convenience
  • FXMaster
  • Laptop Form Fix (if working local from laptop or less than a 21" monitor)
  • libWrapper
  • TinyMCE toolbar config (easier editing options for Journal/text)
  • Merge Walls
  • Wall Cutter
  • Multi-Level Tokens
  • Parallaxia
  • Search Anywhere
  • Token HUD Wildcard (for multi-sided tokens)
  • Card Support (unoffical) (for Decks)
  • Grid Scaler


R20SettingExport.png

In Roll20

You will need resources mentioned above correctly installed to proceed. This document will not cover their installation. It is assumed you've already done such.

1) Open your game in Roll20; Make sure any any doors are marked in a different color, secret doors in yet another color and note them.
2) Go to Settings
3) Once the game HAS COMPLETELY LOADED (very important) choose Export Campaign to ZIP
ExportingProcess.png
4) While it proceeds, do NOT leave the page (as it says)
R20Converter UI.png
5) Open the R20 Converter, and navigate to the downloaded ZIP file
  • Define the World/Module URL name (the folder's name)
  • Define the Campaign name (this is long Name - if not provided, it defaults to the Zip file's name)
  • Define the Walls and Door Colors used (Not needed if WoTC standard modules)
  • YOU MAY (your choice) want to overwrite actor/Feat/Data from SRD compendium
  • Check Mark No Duplicate Actor Items
NOTE: If your converting an entity already part of 5e.Tools site adventures your World/Module URL name must match the json from the adventure's _meta
6) Click Convert Campaign

Prep Work

7) Read the Adventure and make a document to notate adventure details
what the general "mood" is of campaign is
Then break that down into the various scenes/maps;
Notate the environments : underwater/towns/forests/arctic/ships & ocean/caves etc
What are the Major NPCs & twists;
Do you find Merchants with specific goods for sale, and locations for Loot boxes (containers / caches)
What weather effects are helpful to consider (fog/rain/snow/sparks)
Reference the Music collection, found <here>
Reference the Weather/Effects patterns, found <here>
Reference supplemental Icons, found <here>
Does the Adventure use a Card Deck? If so ...
Find Music and Graphics to fill in the missing elements
  • Weather effects;
  • Landing Page (typically the cover art for the adventure)
  • Title Track(s)
  • Additional Sounds/Sound Effects
  • Item/Spell Icons
8) Open the directory for world you will be working upon.
9) Copy of over the default files below into the root of the worlds/<world's_name_dir>/ directory (where you find the world.json
Readme.md
modules.json
checkdependencies.js
10) Create directories
audio
assets
11) place that landing Page graphic (typically the cover) and Title track
Save/convert (See graphics below) the landing Page graphic to the world's /scene/backgrounds/ directory as Start.webp
Save the cover track to worlds/<world's_name_dir>/audio/
Leave the window connection open or make shortcut to this location; and make note of the worlds/<world's_name_dir>/data directory - you'll be working with it and worlds/<world's_name_dir>/packs/ (which is likely not there yet) directory contents later
12) Open the Readme.md



In Foundry

13) Open Foundry Setup
14) Go to the world and define the world's description.
Here is the snippet used at the end of all converted worlds we've done.
World Description Template


 

 

 

Product Information

System: D&D 5E (WorldSetting)

Starting Level: #-#

Length:  One Shot/Campaign

 


DISCLAIMER: The use of this is meant for use for your personal use, and only if you legally possess such in accordance with your local laws.


15) Check the Installed Modules
Suggested Add-On Modules
  • Plutonium
  • The Furnace
  • Better Text Drawings (For text labels/drawings multi-line (Effect doesn't require the world run the module but keeps the effect))
  • Dancing Lights [Likely to be phased out in 0.7.x]
  • Deselection
  • Laptop Form Fix (if working local from laptop or less than a 21" monitor)
  • libWrapper
  • TinyMCE toolbar config (easier editing options for Journal/text)
  • Merge Walls
  • Multi-Level Tokens
  • Parallaxia
  • Search Anywhere


  • Token HUD Wildcard (for multi-sided tokens)
  • Card Support (unofficial) (for Decks)
  • Soundboard



Game Settings

16) Launch World.
17) Head to Game Settings -> Manage Modules and enable
  • Plutonium
  • The Furnace
  • Adventure Importer/Exporter
  • Automatic Journal Icon Number
  • Better Text Drawings (For text labels/drawings multi-line (Effect doesn't require the world run the module but keeps the effect))
  • Context Convenience
  • Dancing Lights
  • Deselection
  • Laptop Form Fix (if working local from laptop or less than a 21" monitor)
  • libWrapper
  • Loot Sheet NPC 5e
  • TinyMCE toolbar config (easier editing options for Journal/text)
  • Merge Walls
  • Multi-Level Tokens
  • Parallaxia
  • Permission Viewer
  • Search Anywhere
  • Vehicles and Mechanisms (for Ships/Vehicles/rotating tiles/rooms)
  • Token HUD Wildcard (for multi-sided tokens)
  • Card Support (unoffical) (for Decks)
  • Roofs & Overhead Tiles (For Towns/Villages)
18) Disable Modules listed in Plutonium Know compatibility issues


19) Enter Configure Settings -> Module Settings
  • Merge Walls (starting point)
  • Max angle Degree 2
  • Max Segment Length 10
  • Adventure Importer [Not implemented Publicly]
  • Click Adventure Importer
  • Download Foundations (5e or 5ePE depending upon target) from here
http://foundry.5e.tools/Foundations/5e.fvttadv
http://foundry.5e.tools/FoundationPE/5ePE.fvttadv
  • Importer Adventure



Compendium Packs

20) Make a Compendium Pack for each of the following entries:
Actor; Item; Scene; Journal Entry; RollTable; Playlist;
Which, should be simply named Actor; Item; Scene; Journal Entry; Table; or Playlist to start. (You're welcome to add Macro as well, but currently there are no included macros)
(you may want additional version of Actor for Monsters



Playlists

21) Head to the Playlist Sidebar
22) Make a START play and add the track you placed previously to worlds/<world's_name_dir>/audio.
23) From the Notes make a playlist for each setting you discovered during reading.
If you are ready go ahead and define the play lists; its helpful to choose the playlists as generic terms so it is reusable, but if you want to go selective use the scene names please for such.
24) Note each used Track used in the Readme.md



RollableTables

25) Unless you're sure of its use; remove the Card Deck
26) Add to your notes any Tokens/Actors that have tables for Multi-sided tokens



Items Directory

27) Head to the Items Directory and remove the Standard Decks element (if its there)


Items will be addressed in data editing phase again.



5eToolsPlutoniumConfirmation.png

Configure Plutonium

28) Click upon the (SettingsConfigEditorIcon.png) Settings
  • Click UI in the left pane:
Enable Streamer Mode;
Disable Name Browser Tab After Active Scene and Display Detected Backend
(this prevents myTab from causing problems)
  • Click Journal Entries in the left pane:
Enable Enable URL Embed and Enable Journal Embed
  • Click Actors in the left pane:
Enable Auto-Roll Multiattacks



Import Foundations 5e Documents

Not publicly available as yet
29) Open <link>



Actors

30) Create a Temp/Test Character with Vision settings for Dim/Bright



Scenes

Here comes the big work.


Create Start Scene
31) Create a scene and name it Start, modifying the configuration
APPEARANCE:
  • Set the Background Graphic to worlds/<json_name>/scenes/backgrounds/Start.webp and Backgroundcolor to something (Darker is better)
GRID:
  • Gridless
LIGHTING and VISION
  • Disable Token Vision & Fog Exploration
  • Enable Global Illumination
AMBIENCE and ATMOSPHERE
  • Audio Playlist - Choose the Start Playlist
ACCESS
  • Set Accessibility to All Players
32) Save Changes
33) Adjust the Scene's zoom and location
34) Configure Start (again) -
AMBIENCE and ATMOSPHERE
  • Initial View Position - click the Capture Current View (CaptureCurrentView.png)
35) Save Changes


36) Remove the Token Scene from the navigation bar (if it exists -- [They are Unnecessary and there for Roll20 to address the problem with Roll20 disk quota and problems assigning tokens])


37) Add two Macros <link>
Macro Fix for imported ACTORS
// Define Actors token bars. Bar 1 - hp. Bar 2 - <none>
game.actors.updateAll(a => ({
    "token.bar1.attribute": "attributes.hp",
    "token.bar2.attribute": "",
    "token.displayName": CONST.TOKEN_DISPLAY_MODES.OWNER,
    "token.displayBars": CONST.TOKEN_DISPLAY_MODES.ALWAYS
}), a => a.data.type === "npc");
Macro Fix for imported TOKENS
// Remove bar 2 for all tokens on map.
const tokens = canvas.tokens.placeables.map(token => {
  return {
    _id: token.id,
    "bar2.attribute": "None",
  };
});
canvas.scene.updateEmbeddedEntity('Token', tokens)


38) Open 5eTools into the adventure or open the adventure locally for comparison to the resulting export.
39) Run the Fix for imported ACTORS (defines resources 2)
40) Go thru each scene.
[a] Run Macro Fix for imported TOKENS (removes Bar 2)
[b] If a map is missing tiles/background note this and proceed to the next map.
[c] Check Map/Grid alignment & Scale (see step #41 if adjustments are needed)
[d] Mark any difficult terrain. (update dependencies if used)
[e] Click the Effects Control and Define the Effects (if any) you wish to use (update dependencies if used)
Underwater; Fog; Embers;
[f] Click upon Wall Controls (<image for it>) then, Click the Clean up Duplicate Walls (MergeWalls.png) (from Tim Posney's excellent [Merge Walls](https://gitlab.com/tposney/mergewalls/tree/master) to address issues with the Roll20 exports (stacked walls and vertices creating to try to reduce the factors for Lighting):
  • Run this at least 3 times per map; until the changes in wall segments is 30 or less in a pass; or until if the changes in the walls begin to disrupt functionality of the map.
  • Manually fix Walls where needed.
  • Go into Configure Settings for Merge wall changings its settings as below and run it again (until until the changes in wall segments is 50 or less in a pass; or until if the changes in the walls begin to disrupt functionality of the map.)
  • Max angle Degree 8
  • Max Segment Length 15
  • Manually fix Walls where needed. (avoid making changes that are under 2ft (in relative scale) in length. ie make changes that have GAME mechanical impact, but avoid minutia configuration - remember that the lower end computers are more commonly used.)
Simplify Walls.png
  • Check each maps doors, remove extra "tidbits" from doors (in general a door should only be one segement in length, redefining them as needed. Setting each door as locked, closed or open as is needed
  • Define the Secret Doors, and simplify where possible
  • Convert standard walls that are better turned into Terrain walls where needed (Columns; Trees; Boulders; objects which are 8ft of more in height) and long stairwells or sets of elevation changes (to mirror loss of vision from elevation changes)
  • Add Invisible walls for Portcullis; Jails; Windows; etc.
  • Add Ethereal walls for Illusionary walls; Tapestries; etc
Macro Helper for working with Walls
function wallUpdate(data) {
  canvas.walls.controlled.map(wall => wall.update(data));
}

let dialogEditor = new Dialog({
 title: `Wall Type Picker`,
 content: `Pick the type of wall to change the selected wall to.`,
 buttons: {
   blockMove: {
     label: `Block Movement`,
     callback: () => {
       wallUpdate({"move": CONST.WALL_MOVEMENT_TYPES.NORMAL});
       dialogEditor.render(true);
     }
   },
   allowMove: {
     label: `Allow Movement`,
     callback: () => {
       wallUpdate({"move": CONST.WALL_MOVEMENT_TYPES.NONE});
       dialogEditor.render(true);
     }
   },
   blockPer: {
     label: `Block Perception`,
     callback: () => {
       wallUpdate({"sense": CONST.WALL_SENSE_TYPES.NORMAL});
       dialogEditor.render(true);
     }
   },
   limitPer: {
     label: `Limited Perception`,
     callback: () => {
       wallUpdate({"sense": CONST.WALL_SENSE_TYPES.LIMITED});
       dialogEditor.render(true);
     }
   },
   allowPer: {
     label: `Allow Perception`,
     callback: () => {
       wallUpdate({"sense": CONST.WALL_SENSE_TYPES.NONE});
       dialogEditor.render(true);
     }
   },
   isDoor: {
     label: `Make Door`,
     callback: () => {
       wallUpdate({"door": CONST.WALL_DOOR_TYPES.DOOR});
       dialogEditor.render(true);
     }
   },
   close: {
     icon: "",
     label: `Close`
    },
  },
  default: "close",
  close: () => {}
});

dialogEditor.render(true)
[g] Define Audio Sources
  • Fires: Fireplaces; Workspaces;
  • Water: Waterfalls; Rivers; Streams; Fountains;
[h] Review Define Light Sources
  • Check if the global lighting token vision or fog of war are needed for that scene.
  • Define Candle/Torches with Dynamic Lighting's FIRE [THIS WILL BE REPLACED LARGELY IN 0.7.x]
  • Colored lights (Glyphs; Lava; Magical lights
[i] Define [Multi-Level Token]
  • Level where the scene has multiple levels on the same scene
  • In/Out where it moves between scenes
  • Clone where one layer overlooks or below another map layer's overwatch position / mezzanine.
[j] [1] to add visual effects (rolling waves/train moving/fog rolling in).
  • Water/Wave - (and underwater)
  • Snow -
  • Rain -
  • Train/Flying/ travel scenes

PROPERTIES

Field Function
Alpha Set's opacity 1 = 100%
X Scale & Y Scale 1=100% scale; use fractions to reduce scale
ΔX & ΔY Rate of change along that axis
X-Offset & Y-Offset Example
ΔX & ΔY Offset Movement : values
down or right +;
up or left -

CUSTOM SCRIPTs: For rotation: next.rotation.z += 0.1; (change value increase; decrease spin speed)

[k] Refer to the notes for MultiSided Tokens, if one appears on the map/scene - set the HUD wildcard for the sides, if the token is a random table you'll need to set the directory for the token (typically worlds/<json_name>/scenes/tokens/<###-<name>>
[l] If a token appears multiple times the map, replace the token with a new pulled token from the ACTORs sheet. (regardless of the number of times a token appears - a unique token image was produced by the exporter - so if you have 100 goblins, you will have, at LEAST 100 copies of the Goblin token stored in worlds/<json_name>/scenes/tokens/<scene_name>/
[m] If you have chosen to - your notes about merchants or containers/stashes - add the Loot NPCs for such. Update the Readme.md with the LootNPC 5e if so.
If a creature appears more than once, then the converter script goes ahead and makes a copy for each instance of that Actor's token.
41) Go into the the Scene's configuration;
  • If adjustments were needed for scale or alignment you hopefully fixed that in 40b, if not you'll likely have to rebuild the scene once updates are applied as sounds/lights/tile/walls/tokens etc locations may shift relative to the background or tiles and no longer align as intended.
  • Link the Journal Notes.
  • Change the background color to a neutral background
  • Review and change the Lighting and Vision as needed
  • Set the Playlist & Weather effect as needed
  • Change Accessibility / Navigation name as needed
42) Drop your Test User onto the map and test the settings, lighting, sound events, check walls and doors; and check Multilevel token areas (remembering where it occurs - to double check that your token was deleted when it moves to another scene and back.)
43) Fix any issues that were discovered
44) Update Readme with any notes about dependencies used etc.
45) Delete the Test user token


46) Repeat steps 40-45 until all scenes without missing tiles/backgrounds have been done.


47) If you did not have a missing graphic proceed to step # ; Otherwise. Fix bad imports and replace corrupted/missing maps. (It happens)
  • Search for a copy of the Maps/Tiles from the Art Repo or pull from the website. (Try to use maps images that don't have tokens or secret doors marking clearly included, instead try to find DM versions of the maps without any tokens/locations).
  • Save and convert it to a .webp type in the worlds/<world's_name_dir>/scenes/backgrounds


48) Exit Game & Navigate to the game's directory worlds/
49) Make a backup zip of the <world's_name_dir> directory (This next part is potentially destructive) - calling it <world's_name_dir>-v001.zip.



File Manipulation

Time to get a bit crazy.
50) Reduce / Remove bloated images
Time to convert the images within the directory this can be done two ways
  • CLI thru FFmpeg (unix/VPS)
CLI ffmpeg -framerate 60 -i filename_%d.png -c:v libvpx-vp9 -pix_fmt yuva420p -b:v 2M -maxrate 2M -bufsize 1M output.webm
  • UI thru XnConvert (for localhosting/windows)
Under Actions clear all metadata (enabled)
Under Output: Filename set to {Filename}
webP settings lossless
Convert all the .PNG art work to .webP removing prior .PNGs

If you're comfortable with your replacement of those Actor's tokens on the map; go into the \scenes\tokens\ directories and remove those duplicate images FOR ACTORS. (more about that later on)
If a creature appears more than once, then the converter script goes ahead and makes a copy for each instance of that Actor's token.
51) Open and Edit world.json
The world.json should already have updated Core and System versions from being opened, but check and if not replace as needed.
	"coreVersion": "0.6.6",
	"minimumCoreVersion": "0.6.0",
	"compatibleCoreVersion": "0.7.2",
	"system": "dnd5e",
	"systemVersion": 0.96,
	"minimumSystemVersion": "0.90",
	"compatibleSystemVersion": "0.96",


Replace the
scripts": [],
line with
"script": ["./checkdependencies.js"],


Replace the languages array (if its empty)
	"languages": [
		{
			"lang": "en",
			"name": "English",
			"path": "lang/en.json"
		}
	],


update the urls
"url": "",
	"manifest": "https://foundry.5e.tools/plutonium/#/world.json",
	"download": "https://foundry.5e.tools/plutonium/#/#.zip",
	"readme": "README.md",

"bugs": "",

	"changelog": "https://wiki.5e.tools/index.php/Foundry:Changelog_Adventures",


and id
	"id": "#",
replacing # with the name of the project (the directory name)

update the authors with whomever wrote or published the adventure

Copy and add this section to the world.json json -- with the notes you've taken keep the ones that were used, remove the ones that were not. Make sure the final entry doesn't have a comma at the closing } (last element in the array of objects).
NOTE: dependencies is used to key off of for the dependencies script;
	"dependencies": [
		{
			"name": "plutonium",
			"manifest": "https://get.5e.tools/plutonium/module.json",
			"version": "1.10.2",
			"author": "Giddy"
		},		
		{
			"name": "DancingLights",
			"manifest": "https://raw.githubusercontent.com/BlitzKraig/fvtt-DancingLights/master/module.json",
			"version": "2.1.2",
			"author": "Blitzkraig"
		},
		{
			"name": "multilevel-tokens",
			"manifest": "https://raw.githubusercontent.com/grandseiken/foundryvtt-multilevel-tokens/v0.3.0/module.json",
			"version": "0.3.0",
			"author": "grandseiken"
		},
		{
			"name": "parallaxia",
			"manifest": "https://gitlab.com/reichler/parallaxia/raw/master/parallaxia/module.json",
			"version": "0.2.9",
			"author": "wonko"
		},
		{
			"name": "Token HUD Wildcard",
			"manifest": "https://raw.githubusercontent.com/javieros105/FVTT-TokenHUDWildcard/master/token-hud-wildcard/module.json",
			"version": "1.0.0",
			"author": "javieros"
		},

{ "name": "Card Support (unofficial)", "manifest": "https://github.com/spacemandev-git/fvtt-card-support/releases/download/latest/module.json", "version": "1.5.2", "author": ["spacemandev"] }, { "name": "Loot Sheet NPC 5e", "manifest": "https://raw.githubusercontent.com/jopeek/fvtt-loot-sheet-npc-5e/master/module.json", "version": "2.1.1", "author": ["Jan Ole Peek (ChalkOne)", "Charles Miller (Kage)"] }, { "name": "Terrain Layer", "manifest": "https://raw.githubusercontent.com/wsaunders1014/TerrainLayer/master/module.json", "version": "0.0.1", "author": ["Will S"] }, { "name": "FXMaster", "manifest": "https://gitlab.com/mesfoliesludiques/foundryvtt-fxmaster/-/raw/master/module.json", "version": "0.8.0", "author": ["U-man"] },

		{
			"name": "polyglot",
			"manifest": "",
			"version": "0.6",
 			"author": "KaKaRoTo"
		},
		{
			"name": "trigger-happy",
			"manifest": "https://raw.githubusercontent.com/kakaroto/fvtt-module-trigger-happy/master/module.json",
			"version": "0.6",
			"author": "KaKaRoTo, tposney"
		}
	],
Check code through JSONonlint. Fix any errors that appear.
Save the file when done.
52) Edit module.json for editing
(This is preparatory work; this won't (as yet) enable the module - but it lays the groundwork for such... and you're here anyway)
#) As with world.json Replace # with the name of the project (the directory name) wherever it appears (Ctrl+H) Find: # ; Replace with: <world's_directory_name>
#) Type in the Project's Long Name. Replace ~ with the name of the project's Title wherever it appears (Ctrl+H) Find: ~ ; Replace with: <Title>
#) Pack data should have been copied over, if so you can save the file. (You will be touching it once more)
Check code through JSONonlint. Fix any errors that appear.
Save the file when done.
53) Open Readme.md for editing
Modify the version of the readme listing.
Check the readme's accuracy for the content you've worked upon.
Check code through JSONonlint. Fix any errors that appear.
Save the file when done.
54) Modify Actors and Items
Open the /data/worlds/<directory_folder>/data
  • items.db
  • actors.db
Search files with a Find & Replace for
  • find: "

    .

    replace with: "
  • find: "

    .

    replace with: "
Save the file when done.
55) Launch Foundry (this reloads the World index)
If the world does not show up in the listing, you may have an issue with the JSON's structure - review and revise it, looking at JSONlint.



In Foundry

Scenes

Revisit the scenes and see if there are any broken graphics (Scene/Actor/Token/Tiles/Drawings)
Check linked Journals
Check Music and lighting
Check permissions
Check Multi-Level tokens

Actor

Now for some Fine Tuning
If you changed the import option from normal to "pull from SRD compendium" this won't be an issue... however you'll have to fix every instance of "multiattack" in each creature that has that, and give creatures with ranged weapons ammunition for those creatures.
If you didn't (ie followed directions) you'll have to fix every instance of a versatile weapon.


Open each actor; if they have the Spellcasting trait, open the actor's spellbook and update their stated casting level and then the slots they have available.
SOME CASTERS IN THE ADVENTURE ARE "NERF'D" to lower their DCs for a balanced combat - so reference the adventure to confirm. Do NOT add slots if they don't have them.
If the importer screwed up their at will casting (not an uncommon thing) - you'll need to change the spell's usage manually.
Replace Actor's weapons (specifically versatile) with items from the Plutonium Compendium.
If they have a ranged weapon, give them ammo of the appropriate sort (personal choice - you can ignore that if you wish) - there is a forth coming module that when a creature is defeated makes them into a loot box.
Check Prototype Token and Confirm Resource bar 2 is set to AC or None (depending).

Decks

Pending

Compendium

Clean up:
Make sure the test Actor is removed and that no token of it exists on any scene
Check that all open doors are supposed to be open.
IF that is all good you can proceed to backing up the data to Compendium
Grab THIS js Macro and execute it.
Move all Actor; Scene; Item; JournalEntries; Rollable Tables and Playlist (if any) to their respective comendia you made back in step 20.


Clean up part 2:
Remove the Utility Macros that were used.
Exit Foundry

Compendium

Close out of

File Manipulation

Making the Compendium work as a module (but from a single file)
You should have access to and the data/worlds/<directory_name> folder
Open all the files in the data/worlds/<directory_name>/packs/ directory in an editor
#) In the data/worlds/
Finishing the Module.
Find and Replace all instances of /data/worlds/ with /data/modules/ that appear across all those files.
Save the file
Open the world.json (if its not already open)
Replace the
 "packs": [ 

with

 "packs": [],
Copy the the directory to data/modules/
Relaunch Foundry (will reload the indexes)
Open a game (any)
Edit Finishing the module.json
(This is preparatory work; this won't (as yet) enable the module - but it lays the groundwork for such... and you're here anyway)
#) As with world.json Replace # with the name of the project (the directory name) wherever it appears (Ctrl+H) Find: # ; Replace with: <world's_directory_name>
#) Type in the Project's Long Name. Replace ~ with the name of the project's Title wherever it appears (Ctrl+H) Find: ~ ; Replace with: <Title>
data/games/<>/data delete the sessions
  • sessions.db
  • users.db
  • chat.db
  • fog.db
  • combat.db

IF your submitting it ...

make a new Zip of directory <directory name>.zip (so that when unzipped it builds the directory and places all files under that directory.



Making things feel familiar

Resources to Emulate Roll20 look and feel inside Foundry
Modules to Make Foundry more like Roll20