Fallout London - joric/maps GitHub Wiki
The map was updated to Fallout London 1.02 (2024-10-18).
- Live map: https://joric.github.io/maps/fallout-london
- Report issues here: https://github.com/joric/maps/issues
- Link by name (you can use underscores and/or spaces): https://joric.github.io/maps/fallout-london/#Arthur_Mountbatten
- You can also use reference or form ID (load order prefix is optional): https://joric.github.io/maps/fallout-london/#2C1EDC
- You can link to search results (click "search results" to copy): https://joric.github.io/maps/fallout-london/#search/Arthur
- You can Ctrl-click or middle-click on a quest or on the inventory item to go directly to the Fallout Wiki page.
- Press R (or click compass) to reset rotation and toggle 2D/3D mode (rotate the map with the right mouse button).
- Press C to center, W, A, S, D to move, Q and E to rotate, Z and X to change pitch, T and G to scale.
- Press 1 ... 6 to switch between maps (you don't have to, all markers are available in London).
- Use arrows ↑ and ↓ to navigate through the text search results.
Fallout 4 has console commands, allowing to travel (press ` in the game to open console).
- Use
tgm
for god mode,sgtm <float>
to speed up time and skip cutscenes,set gamehour to <hour>
to set day time. - Teleport to any marker (or the item) with
player.moveto <RefID>
(click crosshair icon in the popup to copy RefID). - If RefID doesn't work when you're trying to jump to the item, get close to the location, so the item spawns first.
- Get items with
player.additem <FormID> <Quantity>
orplayer.placeatme <FormID>
(click # icon to copy FormID). - Add quest with
startquest <QuestID>
, finish withcompletequest <QuestID>
, set stage withsetstage <QuestID> <int>
. - Click on any door in the console mode and type
unlock
to open. Usedisable
to remove items blocking the door. - Use
tcl
for noclip. If it stops working, deselect the item (click empty space or typeprid
to reset target). - It's possible to fly with
tfc
, andtfc 1
additionally freezes all animations, useful for screenshots. Esc to quit. - To find item by name, use
help "<substring>" 0
, that will show all the info that you can get from the text search. - To add perks use
player.setlevel <number>
, then you can add actual perks (e.g. Hacker) in the Pip-Boy menu. - Use
tmm 1
to open all markers on the game map.
Don't need a mod manager, copy dll/ini to Data/F4SE/plugins folder and they work. Make sure you get mods for 1.10.163.
I've benchmarked a bunch of mods that speed up the game. This test runs on a "hot" SSD (i.e. it's the best result):
- Load Westminster using Buffout 4 only (comes with the game since 1.01 update): 54 seconds.
- Load Westminster using High FPS Physics Fix with this config (from Discord): 27 seconds. Also see Reddit.
- Load Westminster using Long Loading Times Fix with this config (from me): 7 seconds. Has Rusty Faces issue.
It's also recommended to disable weapon debris (you can do it in the graphics settings of the Fallout 4 launcher).
- Download BAE (Bethesda Archive Extractor) from https://www.nexusmods.com/fallout4/mods/78/
- Extract the map image (
WorldMap_d.DDS
), it's in thetextures13.ba
(e.g. search in*textures.ba2
by "pip-boy"). - Use gentiles.py to make tiles:
py gentiles.py -t png -w 512 WorldMap_d.DDS 0-2 ..\tiles\LondonWorld
.
Leaflet uses tile size 256 by default, so set the layer's tileSize
option to 512 first. Then set layer's maxNativeZoom
to your tileset.
Basically, if your tile size is 512 and you're using L.CRS.Simple
then your default coordinate grid is always 512x512, because it's the actual map at zoom level 0. Then you can adjust crs to match the dimensions. Sadly you can't swap x and y.
// w, h, x, y are map size and center
let factor = 1 / tileSize;
let dx = tileSize * (0.5 - x / w);
let dy = tileSize * (0.5 - y / w);
let crs = L.CRS.Simple;
crs.transformation = new L.Transformation(factor, dx, (flip_y ? -1 : 1) * factor, dy);
The flip_y variable depends on the game, CRS.Simple assumes that Y grows down from the left top corner.
- In the Unreal Engine you get a system where X grows right, Y grows down, so it matches Simple CRS.
- In the Creation Engine (Bethesda) X grows right (from the center), Y grows up, so flip_y is needed.
There are about 500 static map markers (Form ID 0x10). I've placed them all under the "Markers" group to toggle with a click.
I export Pip-Boy markers directly from the game ESM files, using the xEdit tool. There are other tools (see the Tools article), but xEdit is the most advanced so far. The downside is it uses Pascal scripting and nobody likes Pascal.
- Copy Export Markers.fo4pas to xEdit scripts as *.pas, right click on any esm in the tree view, click "Apply Script..."
- Alternatively, you can just click on *.fo4pas file and it launches xEdit and runs export automatically (see #655)
- While in xEdit, you can also play with a built-in Worldspace browser script (press Alt+F3 to see markers/locations).
The result is here: markers.json (I also export some of the Worldspace transformations info).
Markers are "placed objects" in the worldspace cells so their object signature is REFR. They can be found in by collecting references to "Map Marker" entries, they have Form ID 0x10 and "STAT" signature ("Static" subtree), click on the "References" tab to see all references in xEdit.
An example using the internal xEdit scripting:
MapMarkerStat := RecordByFormID(FileByIndex(0), $00000010, False);
for i := 0 to Pred(ReferencedByCount(MapMarkerStat)) do begin
e := ReferencedByIndex(MapMarkerStat, i);
id := IntToHex(GetLoadOrderFormID(e), 8);
icon := GetElementEditValues(e, 'Map Marker\TNAM\Type');
world := LinksTo(ElementByName(LinksTo(ElementByName(e, 'Cell')), 'Worldspace'));
x := GetElementNativeValues(e, 'DATA\Position\X');
// ...
end;
Items are "placed objects", they have REFR signature and a reference to the base form ID, with an exception that NPCs are placed using ACHR, not REFR. To find an NPC's reference, click on the NPC and look at the "Referenced By" tab at the bottom. You can Ctrl-click to go straight to the record.
You don't need to go through worldspaces and cells. Instead, go to an item's base record and walk through the "Referenced By" entries. You can go through item base records and their Referenced By records, then filter for placed objects.
// just to make sure you get the idea that you'd be processing ARMO records, e.g.
if Signature(e) <> 'ARMO' then
exit;
for i := 0 to Pred(ReferencedByCount(e)) do
begin
r := ReferencedByIndex(e, i);
if Signature(r) <> 'REFR' then
Continue;
// do work on references
end;
It is also possible to query a collection of references by the item form ID (file index usually matches load order):
item := RecordByFormID(FileByIndex(8), $00023736, False); // Stimpack
for i := 0 to Pred(ReferencedByCount(item)) do begin
e := ReferencedByIndex(items, i);
r := LinksTo(ElementBySignature(e, 'NAME'));
if not Assigned(r) then continue;
// e is instance, r is base item
end;
There may be a discrepancy between the Editor ID numeration and perk names. There are no issue numbers in the game, they are not showing anywhere in the inventory or on the cover. The only tangible thing is the perk name, and sometimes the Editor ID doesn't match the perk name. Though perk names don't seem to show anywhere in the inventory list either.
Property | Dan Rage in Hackney | Dan Rage in London |
---|---|---|
Image | ||
RefID | 072DA509 | 072DBCF8 |
EditorID | PerkMagAstoundinglyAwesomeTales13 | PerkMagAstoundinglyAwesomeTales12 |
Perk ID | 00169698 | 00169696 |
Perk Name | Dan Rage 10 | Dan Rage 13 |
Perk Description | Gain +5 Radiation Resistance. | Do +5% damage against Ghouls. |
Apparently there's an UI mod (such as DEF_UI) that shows Editor ID numeration (PerkMagAstoundinglyAwesomeTales10) on hover instead of a perk name (Dan Rage 5, Gain +5 Poison Resistance) (Reddit).
Vanilla Game (1.02) | Modded Game (UI Mod) |
---|---|
Editor ID cannot be used as an issue number, it's an internal enum (see perk 00169695 in xEdit, use WinningOverride in scripts):
You can build your own magazine rack (Furniture - Shelves - Magazine Rack) as on the pictures (Reddit).
Note that xEdit creates references for the keys mentioned in the XLOC (Lock Data) of the corresponding door. The map scans game items and collects all REFR records for the items, so the door and the key may appear as two separate markers at the same coordinates.
It may cause various issues with the Ref ID duplication. E.g. "HMS Dredge Key" (072F0C99) and "Door" (0006FF48) have the same REFR (07284C7A).
To resolve that, the export script moves referenced keys to the door inventory (since 2f12d030). If there's a separate key item (not an XLOC one), it stays on the map. If there's no key on the map, it's probably in a door inventory and spawned in a quest.
Latest version also adds locked doors that require keys but have no teleport (XTEL) properties, basically gates (since 1358f1d1).
There's no marker for Vinyl 0711DD97 ("Don't want to set the world on fire") in Camden. It's a quest reward, you pick up the quest from Audra (072409E3) in Cyberfox (Reddit). It doesn't appear in REFR items, looks like its respawn is completely scripted:
- QUST:072B6591 - Objective #3 (Check on Audra) - QSTA (Target) - Alias 000 (Audra)
- Aliases - Alias #0 - ALUA (Unique actor) - Audra (072409E3)
- VMAD - Script Fragments - Script - Script Data - Properties - MISC:0711DD97 (Vinyl Record)
Currently there is no way to place scripted items on the map. They are not in the NPCs inventory either. The latest update shows scripted items as "fragments" in the end of the quest objectives list.
There are a lot of ACTI (activator) items, such as call boxes, terminals, taxis, etc. Yes, there's a taxi system in Westminster:
The export script currently collects all NPCs that have 1 or more quests and all named NPCs. If NPC is not referenced in a quest, it is displayed as a "walking" icon (since 7d8c290c).
Quests have 'QUST' signature. Usually an item is directly referenced by the quest. The export script collects all NPCs that have quests and also collects quests for all currently exported items, using references provided by xEdit.
Direct references don't always work, i.e. in the "Chimney Swept" quest (072BA809) we need either a Peacock Feather (072EE8BA) that has direct reference, or a particular type of Oil. You can unequip your weapon in a Pip-Boy and punch the nearest peacock (Mr. Wobbles) to get a feather. If we look in the Oil (001BF732) references, there is no QUST but there is an INFO record (072EE89A), that has a bunch "IF" statements for oil items and a Dialog field referring to DIAL (072EE80B) that finally refers to QUST. A screenshot of the INFO entry (072EE89A) from xEdit:
Processing all those references could be tricky. The map collects script "fragments" that refer to quest items and adds related quests to the item popup, e.g. "Jail Key" is a fragment of "L'appel du Vide" quest (since 8b3c5d2e).
In "Lay of the land" (QUST 0729B7E4) the main issue is that quest depends on Smythe's Calling Card (0729B95C) that falls through the grating die to physics glitch. Picking up the card sets quest stage to 40 (there's a script in the card item). Looking for the quest name in search reveals the card and helps to figure out what we need to continue the quest (Reddit).
The map regions, like Westminster or Camden on the London map, don't quite line up with the dedicated Westminster or Camden maps - they're unevenly stretched, clipped, and rotated at odd angles. The game doesn't help here since it doesn't draw markers in the regions. However, it's much more convenient to have everything on one map instead of switching between different maps, so I remapped those world areas onto the London map by hand (each region now has its own offset, scale and rotation). This transform is applied after the world transform that is in the worldspace data (WRLD signature).
Westminster World | Westminster "Region" |
---|---|
The cell is a separate location in the Creation Engine, usually completely isolated from the outside world. There are two types:
- Exterior cells, that have world reference (they just use world coordinates for items).
- Interior cells, that are separate locations using their own coordinate system.
Interior cells have no position on the map, they can be anywhere and only accessible by teleportation. The 3x3 grid in the cell properties has no relation to physical coordinates. The block/sub-block hierarchy is just to speed up the lookup table. The block/sub-block is decided based on the form id of the cell.
Interior cells might be connected to the world in sneaky ways - through a door, a trigger volume, or even through a script. If you've got the FormID of an interior cell and you want to find the exterior door, you've got to dig through the persistent references of DOOR records for that cell and look for the XTEL (teleportation) subrecord.
The trigger volumes that trigger teleports are called AutoLoadDoor (and yes, it is also a DOOR). Look for the "Automatic" flag in FNAM of the door base object. An example door that connects caves in Fallout London cave area is 0715548C.
I haven't quite figured out how to position interior items properly. It's better to export all the doors beforehand and try. Then you have to apply door positions (and rotations too) to the item, starting from the local cell door, and all way up to the outer door. It implies BFS search with cutoff and tracking so I don't recommend doing it in xEdit.
Because interior cells are connected to the world only through teleports, they don't necessarily match physically. Westminster underground cell (it's very large) may be especially problematic, see this Reddit post:
Pipboy map | Actual metro cell view from top |
---|---|
Exported data is accurate, all transformations are done on the client. Basically I just do a bit of 2d rotation relative to the exterior door. It works well with Archie for example. Sometimes items are scattered further than the outer buildings, despite there's no scaling. I guess this is just how space in fallout works. Interior cells could be larger from the inside.
The map saves your local settings in the local data. You can also export settings in JSON using the "save" link. If it doesn't work for some reason, you can open your browser console and copy the site settings from there (Application - Local storage).
It's very hard to remap markers to the real London. The game map is distorted but if we match bounds and move a few markers we could build an improvised warp mesh that moves other markers.
- Video: https://youtu.be/v26xYROaxyo
- Playground: https://joric.github.io/maps/examples/remap/
- Export script: Export GeoMarkers.fo4pas
London is really warped after the nuclear war. E.g. compare Biggin Hill Airport and Bromley Police Station locations in the game and on the real map. Though, police stations tend to move.
- It's also tough to place "pindars" (British for military bunkers) on the map, most of them are secret.
- Game distances don't really make a lot of sense, you can actually get anywhere on foot.
Using markers as a warp points with global smoothing/power parameters may be not the best idea. Also it looks like at least half of the location markers have to be placed by hand.
- Maybe it needs warp "regions" to select and transform group of markers into another shape.
- There are about 500 location markers (FormID 0x10) on the map, and even more doors.
Discord user @fayewyld made a bunch of useful maps. They are kind of large for this wiki (4096x4096 pngs), so they are a bit compressed (use context menu to open images in a new tab). You can get original files in Discord (server is Team FOLON).
Large images (click to expand)
Game map with markings v16 (Discord)
Transit Lines v17 (Discord)
Camden map comparison (Discord)
There's also a Google Earth remapping project (Google Earth) (Discord).
Camelot's one of the ones I managed to hard confirm! It's the Royal Ballet School/White Lodge in the center of Richmond Park.
Also someone updated an earlier Google map that has the other fallout games to include the FOLON (Google Maps).
See the Tools article.
- Fallout London map: https://joric.github.io/maps/fallout-london
- https://www.reddit.com/r/fallout4london/comments/1en7zm3/jorics_fallout_london_interactive_map (Reddit)
- https://en.uesp.net/wiki/Skyrim_Mod:Mod_File_Format (Bethesda file format documentation)
- https://tes5edit.github.io/docs/13-Scripting-Functions.html (xEdit scripting documentation)
- https://github.com/joric/supraland/wiki (Joric's Supraland Wiki)
- https://www.reddit.com/r/stalker/comments/1hd6me2/stalker_2_map_in_full_64k_resolution/