recursal/Fanatic-Fandom huggingface dataset:
9th Armored Brigade

## Timeline

Sept 1st, 2050: Brigade pushes the 1st Mechanized Division out of New Tecumseth, Ontario; 114 casualties taken, 33 inflicted.

## 9th Armor Brigade

### Faction

Opposition

Sept 3rd, 2050: Brigade encounters stiff resistance and anti-tank defenses on the western approach to Barrie. 97 casualties taken.

Sept 4th, 2050: Brigade attempts to flank the northern defenses of Barrie, but is met by a redeployed force from the road to Orillia. They take 260 casualties and withdraw to their original positions.

Sept 5th, 2050: Brigade launches an assault towards downtown, falling just short of reaching its objective, but gaining ground at the cost of 662 casualties.

Sept 6th, 2050: Brigade secures the northern edges of Barrie, taking 117 casualties.

Sept 7th, 2050: Brigade takes 104 casualties before accepting the surrender of the 1st Mechanized Division.
508th Infantry Brigade

## Timeline

Sept 4th, 2050: Brigade assists in successfully surrounding Domination forces at Port Charlotte, Florida.

## 508th Infantry Brigade

### Faction

Opposition

Sept 5th, 2050: Brigade engages in a few skirmishes during attempts by the 47th Infantry Division to break free at the Battle of Port Charlotte, taking 25 casualties.

Sept 6th, 2050: Brigade occupies North Port, Florida after the surrender of the 47th Infantry Division
Battle of Port Charlotte

## Participants

Opposition:

* 138th Mechanized Brigade (44 casualties)
* 502nd Infantry Brigade (37 casualties)
* 503rd Infantry Brigade (32 casualties)
* 504th Infantry Brigade (27 casualties)
* 505th Infantry Brigade (34 casualties)
* 508th Infantry Brigade (25 casualties)

Domination:

* 30th Infantry Division (108 casualties, survivors captured)
* 47th Infantry Division (248 casualties, survivors captured)

## Events

On September 4th, 2050, six Opposition brigades, along with the threat of the 18th Marine Brigade moving up from the south, surrounded two Domination divisions (16,000 men) in the Port Charlotte area. After a few attempts to escape on September 5th, the two divisions agreed to surrender rather than waste life. Their surrender was accept on the morning of the 6th, with nearly all of the two divisions' 16,000 troops going into captivity. The 5th Armored Division, nearby in Venice, Florida, would surrender on September 7th after a popular uprising in the town. Overall, Domination forces took 356 casualties, while Opposition forces took 199.
Arkwright

Arkwright may refer to:

* Albert E. Arkwright usually referred to simply as **Arkwright**,
* Arkwright's the Store

**This article is a disambiguation page for Arkwright**

The following is a list of links to pages that might share the same title.

Please follow one of the disambiguation links below or search to find the page you were looking for if it is not listed. If an internal link led you here, you may wish to change the link to point directly to the intended article.
Open All Hours Wiki

## Introduction to Open All Hours Wiki

Granville, fetch a cloth!
Open All Hours is a British shopkeeper comedy produced by the BBC and broadcast in for seasons between 1973 and 1985.
Shopkeeper Arkwright (Ronnie Barker) is very hard fisted when it comes to the subject of money. He bosses his nephew, the sexually frustrated Granville (David Jason) around with many jobs and attempts to woo Nurse Gladys Emmanuel (Lynda Baron) from across the road.

## Welcome to the Wiki

This is a wiki, a website that anyone, including you, can edit. Go ahead, try it out! Use the buttons below to create your first episode and character pages.

Create an article about an episode by typing the title below:

Create an article about a character by typing the title below:
 Seasons

Create an article about a whole season by typing the title below:

## Pages created so far

* A Matress on Wheels
* A Nice Cosy Little Disease
* Albert Arkwright
* Albert E. Arkwright
* Arkwright
* Beware of the Dog
* Episode title
* Full of Mysterious Promise
* Fun and Games
* General Discussion
* Granville
* James Baxter
* Leroy Arkwright
* Lists
* Lynda Baron
* Main Page
* New on Wikia starter pages
* News and Announcements
* Open All Hours
* Open All Hours Wiki
* Pilot
* Questions and Answers
* Still Open All Hours
* The Man from Down Under
* The Mystical Boudoir of Nurse Gladys Emmanuel
* The Pilot
* Well Catered Funeral
A Nice Cosy Little Disease

Arkwright prepares the disease

***A Nice Cosy Little Disease*** is the 3rd episode in the 1st series.

## Plot synopsis

Perhaps, a nice cosy little disease on Arkwright's part would be the thing to attract the ministrations of a certain district nurse?

## Appearances

* Arkwright (Ronnie Barker
* Granville (David Jason)
* Nurse Gladys Emmanuel (Lynda Baron)
* Juliet Ackroyd (Linda Mulgrave)
* Tony Aitken (Norman)
* Graham Armitage (man from Matlock Mutual Protection Society)
* Clare Kelly (Mrs. Braddock)
* Barbara Keogh (Mrs. Ellis)

## Notes & trivia

* This is the first time Arkwright attempts to trick Nurse Gladys Emmanuel to medically examine him.
Episode title

The episode titles in Open All Hours are very memorable due to their to-the-point-ness and imaginativeness.

## Episode Titles:

* Full of Mysterious Promise
* A Matress on Wheels
* A Nice Cosy Little Disease
* Beware of the Dog
* Well Catered Funeral
* Apples and Self Service
* Laundry Blues
* The Reluctant Traveller
* Fig Biscuits and Inspirational Toilet RollS
* The New Suit
* Arkwright's Mobile Store
* Shedding at the Wedding
* St. Albert's Day
* An Errand Boy by the Ear
* The Ginger Men
* Duet for Solo Bicycle
* How to Ignite Your Errand Boy...
* The Man from Down Under
* The Cool Cocoa Tin Lid
* Soulmate Wanted
* Horse-Trading
* The Housekeeper Caper
* The Errand Boy Executive
* Happy Birthday, Arkwright!
* The Mystical Boudoir of Nurse Gladys Emmanuel
4th Cavalry Brigade

## Timeline

Sept 1st, 2050: Brigade occupies Williams Lake, BC

## Some attributes

### Third

Faction: Opposition

Sept 2nd, 2050: Brigade occupies Quesnel, British Columbia

Sept 3rd, 2050: Brigade occupies Prince George, British Columbia

Sept 6th, 2050: Brigade occupies Terrace, BC, and Kitimat, BC

Sept 7th, 2050: Brigade occupies Prince Rupert, British Columbia
The Pilot

A younger Arkwright and Granville

***The Pilot*** is technically the first episode in the Open All Hours franchise. Even though it doesn't belong to a series, it is catergorised with Series 1, mainly due to it being leased on DVD with it.

This episode also introduced the characters of Arkwright, Granville and Nurse Gladys Emmanuel. This is the only time Sheila Dunnan played Nurse Gladys Emmanuel, as Lynda Baron took the role for the rest of the franchise.

## Plot synopsis

Arkwright hears that Gladys Emmanuel has another man. ("Couldn't you clasp me to your bosom?") Granville wants a van to meet ladies.

## Appearances

* Arkwright (Ronnie Barker)
* Granville (David Jason)
* Nurse Gladys Emmanuel (Sheila Dunnan)
* Yootha Joyce (Mrs Scully)
* Keith Chegwin (customer)
* David Valla (bread man

## Notes & trivia

* *This is the first appearance of Arkwright, Granville and Nurse Gladys Emmanuel.*
* This is the only appearance of Sheila Dunnan.
Well Catered Funeral

### Director

Sydney Lotterby

***Well Catered Funeral***  is the 5th episode in the 1st series.

## Plot synopsis

His best friend's funeral tests Arkwright's generosity.

## Appearances

* Arkwright (Ronnie Barker)
* Granville (David Jason)
* Nurse Gladys Emmanuel (Lynda Baron)
* Mr. Wilkinson (Reginald Barratt)
* Bread man (John Challis)
* Mrs. Blewett (Kathy Staff)
* Woman outside shop (Elizabeth Dawn – uncredited)

## Notes & trivia

* This episode is the only appearance of the bread man, played by John Challis.
Input Handling

Input is handled by checking bitflags on PlayerVars.scannedButtonsDirect

Example:

`if bit.band( PlayerVars.scannedButtonsDirect, PlayerPad.EVADE ) == PlayerPad.EVADE then`

# Bitflags for PlayerPad

DECIDE=0,

STANCE=1,

DASH=2,

HOLD=3,

FIRE=4,

RIDE\_ON=5,

RIDE\_OFF=5,

ACTION=5,

MOVE\_ACTION=5,

JUMP=5,

RELOAD=6,

STOCK=7,

ZOOM\_CHANGE=7,

VEHICLE\_CHANGE\_SIGHT=7,

MB\_DEVICE=8,

CALL=9,

INTERROGATE=9,

SUBJECT=10,

UP=11,

PRIMARY\_WEAPON=11,

DOWN=12,

SECONDARY\_WEAPON=12,

LEFT=13,

RIGHT=14,

VEHICLE\_LIGHT\_SWITCH=14,

VEHICLE\_TOGGLE\_WEAPON=14,

CQC=15,

SIDE\_ROLL=16,

LIGHT\_SWITCH=17,

EVADE=18,

VEHICLE\_FIRE=19,

VEHICLE\_CALL=20,

VEHICLE\_DASH=21,

BUTTON\_PLACE\_MARKER=22,

PLACE\_MARKER=22,

ESCAPE=23,--tex Not in PlayerPad, own name

# Notes

dash,hold,fire,subject and cqc aren't listed in exe for whatever reason but are used at different points in script. I worked through it all manually anyway back when, both printing out the value of the flags and testing flags that would fall in the gaps.

The numbers on the list are the pow values, so do 2^flag index (except for ALL obviously) if for whatever reason you want to use a direct value, though not much use since they mostly seem accounted for.

ESCAPE (my naming) is a bit odd, figured it out manually from the next logical value/outputting scannedbuttons, but there's no actual matching use of it I could see in the scripts, it's not strictly the Pause binding since it's still set on press even if Pause is rebound.

2^24 is set on both quick dive and RS click, which has so much bound to it that I can't really figure out what it's supposed to signify.

Testing 2^25 to 2^32(assuming uint) didn't come up with anything further, though it can't remember how exhaustively I tested those (it's been a while)

You'll see a bunch of the flags use the same values, which means there's no way to differentiate on those when pressed.

The naming of the functions band/bor/bxor and the rest in the exe suggest fox engine is using an implementation of bitops http://bitop.luajit.org

STICK\_L STICK\_R TRIGGER\_L TRIGGER\_R TRIGGER\_ACCEL TRIGGER\_BREAK are used with other functions/variables/not used with scannedButtons

See Infinite Heavens /Assets/tpp/script/ih/InfButtons.lua for some more notes.
PFTXS

## **PFTXS (Packed Fox Textures)**

.PFTXS files are just archives of .FTEXs files associated with a matching name .fpk archive to enable faster loading of textures.

I.E reinforce\_veh\_west\_tnk\_a.fpk and its associated reinforce\_veh\_west\_tnk\_a.pftxs for a tank.

Interesting things to note about this file is that the FOX engine will first search the PFTXS for any texture files referenced by models in the FPK, and then start searching the rest of the MGSV .dat files if it cannot find textures inside the PFTXS.

At time of writing, Snakebite 0.9.16 still cannot pack and unpack individually changed texture files inside of PFTXS files, and will instead overwrite the .pftxs file in its entirety. This means if a couple of edited texture files have to be put into multiple different PFTXS files, it can be economical (or necessary, see below) to delete them from the PTXS and place them as loose textures in the "Assets/" folder hierarchy. Then upload both the loose textures along with the edited (and smaller) PFTXS files

This reduces the file size and need to send several 20MB+ PFTXS files with mods to users, but at the cost of slightly slower load times for the textures.

N.B One thing to watch out for is the file size of PFTXS must be 30MB or under. Otherwise the FOX engine will start hanging or infinitely loading when it tries to load textures from the PFTXS files.

Modding tools:

It's highly recommended to use File Monolith to unpack all the PFTXS files.

AutoPFTXStool can be used for packing and unpacking individual PFTXS files if need be.
75th Infantry Brigade

Sept. 3rd, 2050: Brigade advances in reserve during the Battle of Barrie

Sept 4th, 2050: Brigade takes the place of the 73rd Infantry Brigade due to high casualties, but does not engage in any fighting

Sept 5th, 2050: Sept 5th, 2050: Brigade launches an all-out offensive toward the Barrie waterfront, ultimately reaching it, but at the price of 703 casualties, leaving them without nearly half of their front-line troops.

Sept 6th, 2050: Brigade's auxiliary units support the 73rd Infantry in an assault on downtown Barrie, taking 36 casualties.

Sept 7th, 2050: Brigade supports the flank of the 9th Armored Brigade while mopping up the last few defensive positions held by the 1st Mechanized Division. They lose 47 men.
Full of Mysterious Promise

Arkwright and Granville

***Full of Mysterious Promise*** is the 1st episode in the series. Even though it isn't the first episode, it is the first one to belong to a series.

## Plot synopsis

"Why don't we get engaged before we both grow a moustache?" What's more fruitless: Arkwright's pursuit of Nurse Gladys Emmanuel, or his attempt to sell tins of food without labels?

## Appearances

* Arkwright (Ronnie Barker)
* Granville (David Jason)
* Nurse Gladys Emmanuel (Lynda Baron)
* John Lawrence (Mr. Bristow)
* Gillian McClements (Gloria)
* Kathy Staff (Mrs. Blewett)
* Peter Wallis (Winston)
* Poppy Lane (Extra – uncredited)

## Notes & trivia

* Even though this isn't the first episode, it is the first episode to be in a series.
* This is the first appearance of Lynda Baron. In The Pilot, Nurse Gladys Emmanuel was played by Sheila Brennan.
Steam Deck

Quick guide to using Snakebite for the deck.

1. Go to desktop mode on your Deck by holding down the power button and selecting "Switch to desktop".

2. In the bottom left of the desktop you'll see the "Discover" app store. Open it and search for "Wine" (has a tasty glass of red wine for a logo) and download it.

3. Next, download Snakebite from here: https://www.nexusmods.com/metalgearsolidvtpp/mods/106

4. When Snakebite is downloaded, navigate to your download folder and using the right track pad you must right click "SnakeBiteInstaller.exe", then "Open with..." then click your newly installed Wine. Once downloaded, you will see both SnakeBite and SnakeBite.ink - you will need to execute SnakeBite.ink every time you wish to use it. In order to execute it, right click it using the track pad and click "Open with..." then your newly installed Wine.

5. You'll now need to locate your game directory. This part seems tricky at first, but ultimately isn't once you know what to do. Click the 3 dots to start locating the directory - go to: /home/deck/ then once your in "deck" you need to click the bar which you can type in and pull up the steam keyboard using the STEAM button + X. You'll then need to type ".local" (minus the quotation marks) then click enter so you enter the hidden .local folder. You should now be able to go to /share/steam/steamapps/common/MGS\_TPP. Follow the next steps in order to install your downloaded mods.

NOTE: You will have to repeat this process every time you wish to open SnakeBite, at least for now.
UILB

UILB (UI Library?) files are used in MGS:V for UI element layouts such as the interactive menus in the mission prep and weapon customization menus, but only in the visual style of things, meaning that this file type is not associated with what the menus actually do, only how they look. Current information about the way it functions is very little. Files of this type are usually contained within a **LayoutAsset** folder inside fpks. One example of this is the **heli\_ui.fpk** file (found in Assets/tpp/pack/mission2/heli), which contains a lot of the UI files related to item selections and mission prep among other things. Currently the only way to modify these files is through a hex editor like HxD. The format is Little-Endian, meaning bytes are written in reverse order of significance.

## The structure

The structure is mostly unknown. Something interesting is that all of the UILB files contain 2 special bytes in a lot of areas: **0x803F**. These appear to be very important, because replacing at least 1 of these in a file with anything else will cause the UI associated with that file to appear invisible in-game (most likely because it breaks it), but what they actually do is unknown. But through experimenting it appears that shifting those 2 bytes left or right can either break the UI associated with the file, or disable some effects. In the case of the **UI\_missionprep2\_main\_list.uilb**, shifting the the second **80 3F** byte in line 7 will disable the effect of the selected menu line moving. Every UILB file is of a different length, depending on the complexity of it. However, patterns can still be found, such as the ones listed below:

 0x0B - 0x0F
 0x13 - 0x17
 0x1B - 0x23
 0x2D - 0x45
 0x4A - 0x8B

Furthermore, nearly every UILB file contains 6 hashes near the end of it, three StrCode32 and three PathFileNameCode32. The StrCode32 ones contain names of .UIF, .UIA and even other .UILB file names that are included in the same fpk. The other three PathFileNameCode32 hashes contain the specific directory paths of those files (and with the actual name of the file in them). However, those paths only mention .UIA files, so it's very much a possibility that UILB files only load .UIAs and not anything else, but this has to be confirmed.

Also, it should be noted that sometimes the file name of a file in an StrCode32 hash may not correspond to the same name in its PathFileNameCode32 hash.

## Notes

* The bytes **0xFF** and **0x00** act exactly the same (they don't do anything). The reason they're both used in a file simultaneously is unknown.
* The second screenshot shows a UILB file that's broken (the highlighted part is the one that was edited), which causes the options in the menu to be stitched together. However, changing any part of the data of a UILB file with something incorrect (we don't know the difference between correct-incorrect right now) also yields the same result (or it becomes completely invisible).
505th Infantry Brigade

Sept 1st, 2050: Brigade occupies North Port, Florida

Sept 2nd, 2050: Brigade occupies Port Charlotte, Florida

Sept 3rd, 2050: Brigade withdraws from Port Charlotte to the north, successfully baiting the 47th Infantry Division into the city.

Sept 4th, 2050: Brigade successfully assists in surrounding Domination forces at Port Charlotte.

Sept 5th, 2050: Brigade engages in a few skirmishes during attempts by the 47th Infantry Division to break free at the Battle of Port Charlotte, taking 34 casualties.

Sept 6th, 2050: Brigade moves to face defenses of the 5th Armored Division after the 47th Infantry Division's surrender at Port Charlotte.

Sept 7th, 2050: Brigade occupies Venice alongside the 504th Infantry Brigade after a popular uprising in the town resulting in the 5th Armored Division's surrender.
Granville

Granville in his younger days

Template:Stub
**Granville** is Arkwright's nephew/errand boy

## Biography

Little is known about his early life, except he is the son of Albert Arkwright's half-sister, thus being his nephew. He was brought up by Arkwright and has worked as his errand boy in his shop since childhood. According to Arkwright he is half Hungarian, Arkwright once joked that Granville's bottom half is called "Hugo"
The Mystical Boudoir of Nurse Gladys Emmanuel

**The Mystical Boudoir of Nurse Gladys Emmanuel**

Series 4 | Episode 6

of [name of Series] consists of # episodes.

The season premiered on Oct 06 1985.

## Plot overview

Ever anxious to worm his way into Nurse Gladys's bedroom as well as her affections, Arkwright finds that flattery and chocolates are no use. But he has a cunning plan to use Granville to impersonate a burglar, wearing a stocking mask to scare Nurse Gladys so that Arkwright can come running . . . into her room. Granville is sick of trapping his hand in the dangerous old till and wants his uncle to buy a new one.

## Image gallery

<gallery>
Image:Placeholder

</ga

   llery>
Graphics

## Shaders

Metal Gear Solid V: The Phantom Pain uses normalized Blinn-Phong for it's specular BRDF with it's diffuse BRDF being Lambertian. There are many shaders used, most being variants of main shaders for things like grime, blood, fire, etc. The shaders are split up into 4 categories and lists of the shaders in each category can be found at the following links.

### TppShaders\_dx11

* Shader names
* Shader parameters
* Material type names
* Texture type names

### GrModelShaders\_dx11

* Shader names
* Shader parameters
* Material type names
* Texture type names
Battle of San Jose (CA)

## Participants

Opposition:

* 247th Mechanized Brigade (124 casualties)
* 61st Mountain Brigade (95 casualties)
* 52nd Air Assault Brigade (395 casualties)
* 45th Airborne Brigade (66 casualties)
* 79th Armored Brigade (102 casualties)

Domination:

* 9th Mechanized Division (506 casualties)

## Events

Sept 1st, 2050: The 247th Mechanized Brigade attacks from the north while the 79th Armor attacks from the east. The 61st Mountain advances through the coastal mountains to the east of San Jose to cut off their eastern escape, while the 45th Airborne Brigade drops to the south at Morgan Hill to cut off their southern escape. With the division surrounded, opposition forces, spearheaded by assaults from the 52nd Air Assault Brigade around the city, tighten the noose, but the 9th Mechanized Division holds its ground for the time being, with air support likely to arrive the next day.
VFX

An **FxVfxFile**, with the extension .vfx, is a binary file format used by Fox Engine to define node graphs which drive visual effects.

Because of the complexity of the Fx system, the format remained indecipherable for a long time, and would have remained unknown until one non-binary file was found left in the game: fx\_tpp\_splbrdwng01\_s1.vfx, which is actually a DataSetFile2. That one file provided insight into the structure of the .vfx format.

They can be unpacked and repacked with VfxTool.

## Structure

A .vfx file is a directed acylic graph of Fx nodes with a single global output: an FxModuleGraph node. Each node produces different outputs, and they're combined together to produce complex effects.

There are a wide variety of Fx nodes, although only a small number of them are currently known. More research must be done to catalog the nodes, their parameters, and what they do.

## Format

### Header

* 0x0 - 0x2 (char[3] (no null terminator)): 'VFX.' Format signature.
* 0x3 - 0x4 (uint16): Version number. Often (always?) 2.
* 0x5 - 0x6 (uint16): Node count.
* 0x7 - 0x8 (uint16): Edge count.
* 0x9 - 0xE: Padding.

### Nodes

The bulk of the format is the node data, which follows the header. There is one entry for each node. The first node is always an FxModuleGraph node. For details on parameters, see the list of Fx nodes.

#### Node definition struct

* 0x0 - 0x7 (uint64): StrCode hash of node class name.
* Parameters

The parameters differ for each node class. They are listed in alphabetical order (although the names aren't written in the file) and can be many different data types. Before each parameter is a single byte, usually 1, denoting the array size of the parameter.

### Edges

The nodes are followed by the graph edges, which connect nodes together.

#### FxModuleEdge struct

* 0x0 (byte): Source node index.
* 0x1 (byte): Target node index.
* 0x2 (byte): Source port type.
* 0x3 (byte): Source port index.
* 0x4 (byte): Target port type.
* 0x5 (byte): Target port index.
Battle of Orillia

## Participants

Opposition:

* 9th Cavalry Brigade (30 casualties)

Domination:

* 1st Mechanized Division (45 casualties)

## Events

On September 2nd, 2050, the 9th Cavalry Brigade cut the northern route of retreat for the 1st Mechanized Division by blockading the road north of Orillia. They then moved into town, forcing the advance troops of the 1st to retreat after an intense skirmish.
How to replace sortie prep music in less than five minutes

**This video assumes you have unpacked your game with File Monolith and have SecaProjects SBP Tool, Wem Converter and Wwise installed.**

You will also need a basic understanding of MakeBite and how to use SnakeBite Mod Manager.

File Monolith

SBP Tool

**Sound Converter**

Wwise 2015

#### Part 1: Locating the .sbp and extracting it

To start off, you will need to find **common\_bank\_01.sbp.** located in **Assets/tpp/sound/asset**.

Once you have found it copy it into your working folder, then drag it onto the SBP Tool. This will create a folder called common\_bank\_01 and extract it into .wems we can work with. Now open the new common\_bank\_01 folder and go into the stp folder. There you will find **3cb314cd.wem**, This is the sortie prep music file.

#### Part 2: Converting and finding a replacement

Now you have **3cb314cd.wem** you should copy it into the sound converter folder alongside **divinity\_converter.exe**. Double click the exe and it will convert the .wem into a .ogg inside the NUMBERED folder. Just to be safe, listen to it to make sure you got the right file. Now comes the fun part, find a piece of music you think would sound good and make sure its in the **.wav** format. Now open **Wwise 2015** and create a new project, go to **File** up the top left and down the menu to **Project Settings.** Click on the **Source Settings** tab then **Default Conversion Settings**, Change it to **Vorbis Quality High**. Now click ok on both panels to save your new settings.

#### Part 3: Wav to Wem

At this point you should have your new music in wav format ready to be imported into Wwise. Click **File** up the top left and go down to **Import Audio files**, after clicking this a new window will pop up and you must drag your .wav into it. Now click the import button. Once done head back up to the top left and click on **File** once more then down to **Convert All Audio Files**. Make sure **Windows** is ticked then click ok and your wav has been successfully converted! Finally, Head to **(User)/Documents/WwiseProjects/(projectname)/Windows/SFX.** Your .wem will be there.

#### Part 4: Replacing and Repacking

Copy your new .wem back to your working folder and into **common\_bank\_01/stp**, now delete **3cb314cd.wem** rename your new .wem to **3cb314cd**. Once this is done go back to the folder with **SBP Tool**, The **Common\_bank\_01 Folder** and **Common\_bank\_01.sbp**. Rename **Common\_bank\_01.sbp** to something like **Common\_bank\_01\_Backup** for safety, Then drag the **Common\_bank\_01 Folder** onto **SBP Tool**. This will create a new **Common\_bank\_01.sbp**.

#### Part 5: Making your mod

Create a new folder structure like: **Assets/tpp/sound/asset** and place your new **Common\_bank\_01.sbp** inside. Open **MakeBite** and build your mod, make sure you fill out the name and description so you don't forget what the mod does. Once created, install your mod with **Snakebite** and you are done!
Zeta

**Zeta** is an Infinite Heaven add-on that is both an in-game mod manager and modding framework. It was created to simplify modding, to improve mod organization, and to resolve file conflicts between mods. It can manage weapons, vehicles, custom player models, buddies and more. It's required to use Zeta modules.

## Features

* Mod Manager: Configure all of your mods in-game! You can toggle them, change their settings as well as their load order.
* Modding Framework: Using several new LUA functions, you can easily make the modifications you want without overwriting game files.
* Mod Support: Playable characters, vehicles, buddies, soldiers, missions, weapons, items, camos, LUA mods, and more!
* Non-Replacer Mods: Mods no longer conflict with one another! They can have their own unique assets without replacing vanilla content.
* Backwards Compatibility: Non-IH mods can be loaded by Zeta and used alongside other mods.
* Included Mods: Advanced Graphics Menu, Unlocked Weapon Customization, Zeta Editor

## Requirements

* SnakeBite Mod Manager
* Infinite Heaven
* IHHook

## Installation

* Extract "ZetaIHAddon.zip"
* Open SnakeBite Mod Manager
* Go to "Mods"
* Click "Install .MGSV file(s)"
* Select "ZetaIHAddon.MGSV"
* Click "Continue Installation"

## Usage

* Download and install MGSV mods that require Zeta.
* Hold down the Dive button (Space Bar) or press F3 to access the IH overlay menu.
* Scroll down to "Zeta Menu"
* To select an option, press right, or numpad 6.
* General Settings has options that change how Zeta works overall.
* Mod Management has options for all mods installed.
Reverse Engineering (Software)

## Definition

Reverse engineering or "Reversing" is the process of dissecting artifacts without any reference. Reversing is applicable to most man-made artifacts, but in the case of game modifications it refers to extracting meaningful information from executable binary. It should be noted that reverse engineering and science are nearly identical, what defines reverse engineering is the study of materials created by man rather than studying naturally occuring phenomena. To begin reversing a video game you need to have a basic understanding of low-level software.
Entities:DataSet

The entity of type **DataSet** ​is common to all .fox2 files and is mandatory if any entities are placed in the .fox2 file. It contains a list of every entity used in that particular .fox2, presumably used as a table referenced by the editor to enumerate the various objects placed therein.

## ​Usage

Only one entity of type **DataSet** has ever been observed to exist in a given .fox2, and it is assumed due to the nature of this entity that only one is allowed. An entity block defining the **DataSet** has the following header:

> *<entity class="DataSet" classVersion="0" addr="0x02D7DFA0" unknown1="232" unknown2="89171">*
>
>

​The only header property known is *addr*​. This header property indicates where in the .fox2 the beginning of the **DataSet** entity is located. *unknown1* and *unknown2* remain just that; their usage and importance remains a mystery.

Following the header block are three property blocks: *name*, *dataSet*, and *dataList*.

*name* follows the following convention and is usually left empty in a **DataSet**:

> *<property name="name" type="String" container="StaticArray" arraySize="1">*
>
>
> <value></value>
>
>
>
>
> </property>
>
>

*Following* name *is* dataSet*, a property common to all Fox entities. As a **DataSet** entity is necessarily not contained by itself or another **DataSet**, this field is usually zeroed, like so:*

> <property name="dataSet" type="EntityHandle" container="StaticArray" arraySize="1">
>
>
>
> <value>0x00000000</value>
>
>
>
>
> </property>
>
>

*The* value *subblock is a pointer to the **DataSet** entity, if this entity belongs to a **DataSet**. Typically you may acquire the value of this field by observing the* addr *property in the header block of the **DataSet**. It should be the same for all entities in the .fox2.*
Following *dataSet* is *dataList*, which is the property block that actually contains the list of entities used in a given .fox2. It has a format like the following:

> *<property name="dataList" type="EntityPtr" container="StringMap" arraySize="2">*
>
>
> <value key="cypr\_location">0x02D7E010</value>
>
> <value key="TexturePackLoadConditioner0000">0x0827ADC0</value>
>
>
>
>
> </property>
>
>

*Each value block contains one property,* key, *which is equivalent to the* name *static property of the given entity. The value itself is a pointer to that entity, given by the* addr *header block property of that given entity.*

The size of the **DataSet** is variable, depending on the number of entries listed in *dataList*.
Route

In TPP and GZ, the **route system** governs the behavior of AI agents such as soldiers. Routes are stored in route sets, defined in FRT files.

frt files can be opened and created with FoxKit. Further info here

## Overview

A route is a linear sequence of nodes, each of which has a location in space. An agent acting along a route will travel from node to node, and upon reaching the end of the route, they will return to the first node and the route will repeat.

Although each agent only acts along one route at a time, multiple agents may patrol the same route together. In addition, an AI agent is assigned a number of routes, and which one they use at a given moment is dictated by the alert status:

* Sneak route: Used when the agent's CP is unaware of the player.
* Caution route: Used when the encampment is on alert.
* Alert route: Used during combat alert. Combat AI usually uses a unique system, however, so having an alert route defined is rare.

You can change an agent's sneak route in Lua by calling:

```
GameObject.SendCommand(gameObjectId, { id="SetSneakRoute", route=routeId })

```

where gameObjectId is the GameObject's ID (obtained through calling GameObject.GetGameObjectId) and routeId is the name of the desired route, for instance, rts\_ptr\_e\_citadel\_W\_0000. The caution and alert routes can be changed the same way, using "SetCautionRoute" and "SetAlertRoute" respectively.

### Other uses

Routes aren't only used for enemies. Helicopters also use routes, particularly for defining the approach and departure behavior for Pequod when using LZs.

## Events

The most complex aspect of the route system are route events, and they are still not fully understood. There are two classes of route events:

* Node events are performed once an agent has arrived at a node.
* Edge events are performed while an agent is on their way to a node.

An example of a node event is CautionStandIdleReady, which causes the agent to stand idle in the caution stance. An example of an edge event is RelaxedWalk, which causes the agent to walk in a leisurely way to the node.

One of the most versatile node events is SendMessage, which can trigger a message in Lua, allowing you to write custom code to invoke whenever an agent arrives at that node.

As each event has different parameters, and not all of the event names have been discovered yet, this is still an area of active research. If interested, consider using FoxLib to unpack, edit, and create frt files to experiment with routes.

## Notes

* Assigning a soldier to a nonexistent route will not crash the game, but seems to make the soldier disappear.

## See also

* Route findings
* Route descriptions
AutoPftxsTool

AutoPftxsTool is an open-source automatic .pftxs unpacker and repacker for Metal Gear Solid V: The Phantom Pain written by BobDoleOwndU. It simplifies the process of adding new textures or sub-textures to a .pftxs file as it eliminates the need to edit an .xml with new entries to do so.

## Usage

To unpack a .pftxs archive, a user simply needs to drag a .pftxs file onto the tool. This will output a folder containing all of the files contained in the .pftxs file. To add new textures, a user simply needs to place the textures inside the unpacked folder. To repack a .pftxs file, the user simply needs to drag an unpacked folder onto the tool. The tool will automatically detect all textures contained in the folder and pack them into a .pftxs file.
Mesh Mashup

This guide will explain the process you'll have to go through if you want to exchange meshes between models using blender

## Intro

Let's say your objective is to put quiet's boots into the goblin swimsuit, this will work because both leg and boot meshes share the same bones, so something like a model from a different game, or a mesh with specific bones from another fox-model will not work without rigging it which will not be covered in this guide.

## Pipeline

1. import all the fmdl models you want in unity, they should all be at 0,0,0 so overlapping each other.
2. select the desired meshes then drag and drop them inside of the model hierarchy you want, avoid repeating numbers such as: "5 - MESH\_leg" and "5 - MESH\_body" otherwise they'll disappear in blender.
3. to export them out of unity as .dae, convert them to .fbx with the autodesk fbx converter .
4. import it into blender, no actual changes need to be made in it, it's simply the case that a "dry" swap in unity only cannot be done or else the model will stretch into infinity in a random direction when ported into the game.
5. the model will have a 90 degree rotation on the x axis, change that number to 0, the model should lay flat on it's back.
6. immediately bring it back up again by putting the value back to 90.
7. then while having the armature selected press "ctrl+a" and select "rotation", this will bring the x axis' rotational values back to 0 but the model's orientation will not visually change but all the meshes will have a +90 degree rotation on the x axis.
8. now export as .dae with no global transforms with -z forward and y up.
9. in unity the model's orientation should appear to be correct in the model preview but wrong when you drag and drop in the viewport so when you bring all the positional and rotational values back to 0 the model should be centered and up straight, if that's not the case you screwed up some previous step.
10. now export as .fbx and reimport it back into unity, this is done so that the bounding boxes are generated correctly, the model will and should be oriented wrong, specifically it should be on it's back, now apply the materials and etc.
11. export it as .fmdl and reimport it, now the model should be oriented correctly and game ready, now export once again.

## Additional Notes

Sometimes if you're suffering from non-model related visual glitches you'll need to implement the textures you'll use in the file structure of your mod which would look something like this: "Assets\tpp\chara\(variable asset suffix like 'dld' or 'sna')\Pictures". to find those textures you can double click the texture icons in the inspector tab in unity, that will show you the texture size, name, resolution, and location, you can use that info to fetch the dds and drop them on the "Pictures" to later convert them back to .ftex and .ftexs by using the .ftex tool.
How to save your .DDS image

So, let's assume you're adding some custom textures to the game and you want to save your new .dds image in order to implement it. Using your .dds editor of choice you will be met with a few options, such as mipmaps, DXT type, etc. So I'm gonna explain what these options mean because you want to choose different ones depending on the type of image you're making.

There is one universal rule here which is to \*always\* generate mipmaps. They are important for the game to load textures correctly. As for the DXT/`BC` type, there are two main types you're gonna use: DXT1/`BC1` and DXT5/`BC3`. The one you'll use depends, again, on what type of texture you're saving.

BSM/regular textures are DXT1/`BC1`

NRM/Normal maps are DXT5/`BC3`

SRM is DXT1/`BC1`

LYM is DXT1/`BC1`

DTX is DXT1/`BC1`

Why? DXT1/`BC1` does not save alpha/transparency maps, and utilizing them when you're not trying to can cause texture issues/errors. Only Normal Maps regularly utilize alpha maps and are the only texture that should be saved using DXT5/`BC3` - the type that saves the normal map.
FMTT

The file type .fmtt is a reference for the material ID maps for models, shaders load the material ID texture and use it to load the fmtt. A condensed definition of this format would be an array of code similar to the reference below:

```
type public MaterialPreset = {

 F0 : float32

 RoughnessThreshold : float32

 ReflectionDependDiffuse : float32

 AnisotropicRoughness : float32

 SpecularColor : ColorRGB

 Translucency : float32

}

```
It should be noted that MatParamIndex\_# parameters allow one material to have multiple presets assigned to it. The codeblock above is a parameter for all materials. Most notably SpecularColor. The location of these files can be found in data1.dat. There can only be 256 material presets assigned to this array.
SubpTool

## Dictionary

SubpTool utilizes a dictionary of filenames called subp*\_dictionary.txt.* As it decompiles the subp, it compares the hashes generated from this dictionary to any hashed keys it finds. If it finds a match, it will output the string by it's real name with the XML attribute 'SubtitleId'. If it cannot find a match, it will output the string by its hash with the XML attribute 'Id'.

The most current dictionary can be found here: https://github.com/TinManTex/mgsv-lookup-strings
NAV2

NAV2 (.nav2) is a navigation file associated with NPC "navmesh" map navigation. These filetypes are specifically present in Metal Gear Solid V: Ground Zeroes (2014), Metal Gear Solid V: The Phantom Pain (2015), and Metal Gear Survive (2018). Tools for editing NAV2 are available.

https://github.com/oldbanana12/Nav2/wiki/Editing-Flags

https://www.bountysource.com/issues/91675424-navnavigationfile-nav2-format-1013-00-submission-pending
Iron Sight adjustments, fire-rate, draw and reload speeds

Iron sight adjustments can be made to guns, this is needed specially for custom model guns.

These values are in EquipParameters.lua which can be found on:

TPP

> \0\00\_dat\Assets\tpp\level\_asset\weapon\ParameterTables\parts - *With Snakebite*
>
>

> \data1\_dat\Assets\tpp\level\_asset\weapon\ParameterTables\parts - *Without Snakebite*
>
>

MGO

> chunk0\_dat\Assets\mgo\level\_asset\weapon\ParameterTables\parts
>
>

After we locate the file we have to search for *receiverParamSetsBase=*

Each section {} belongs to a weapon, the order follows the same in-game order.

Here is what we know so far what each value does:

The names are self explanatory.

Here we will focus on iron sight alignment,

as you can see there are 2 iron sights, here is an image showing this:

The sights used to look like this before getting fixed:

   You gotta find an alignment between the two sights

First Iron sight; 1 being the center, the higher the value, the farther the view will be, example value 111

The less the value the closer it will be (zoomed in) example -111

You can see it completely skips the second sight.

If 1 is the *center* you will usually will want to work with decimals when aligning.

Second iron Sight; The second sight usually deals with depth, just like the first one 1 being the "center" although this time the higher the closer, example of 111

Example of -111

Just as a reference this is how it looks with the vanilla values:

The rest of the values are self evident, Fire-rate takes care of the fire-rate of the weapon the higher the faster, draw speed is how fast the player pulls the weapon and aims, this sometimes gets affected by other factors like snake's arm or certain abilities either on tpp or mgo, for that it is better to play with decimals the closer to 1 the faster, the farther the slower, reload speed works the same way. Aim-assist distance is calculated in meters.
LangTool

LangTool is an open-source Fox Engine XML compiler/decompiler for Metal Gear Solid V: Ground Zeroes and Metal Gear Solid V: The Phantom Pain created by Atvaark. It is capable of reading the data from lng and lng2 files and converting them into XML files, where users may read and edit them. It can also do the opposite, converting XML files into lng/lng2 files.

## Usage

To decompile a lng or lng2 file, the user simply needs to drag the file onto LangTool. To compile a decompiled lng file, the user simply needs to drag the lng.xml file onto the tool.

## Dictionary

LangTool utilizes a dictionary of filenames called lang*\_dictionary.txt.* As it decompiles the lng, it compares the hashes generated from this dictionary to any hashed keys it finds. If it finds a match, it will output the string by it's real name with the XML attribute 'LangId'. If it cannot find a match, it will output the string by its hash with the XML attribute 'Key'.

The most current dictionary can be found here: https://github.com/TinManTex/mgsv-lookup-strings
Custom Missions List

Custom / Addon Missions for Metal Gear Solid V: The Phantom Pain.

See MissionCodes for vanilla missionCodes.

Infinite Heaven is required to add them to the game.

Note for mission authors: Due to how the engine uses missionCodes must be unique for each mission. So if you are creating missions you should make sure you don't conflict with existing ones, and update this page with the ids you intend to use.
Loading Lua files externally using IH

## Using IH to load lua files externally (in MGS\_TPP\mod) instead of internally (in dat or fpkd)

These methods should only be used to speed up developing a mod, when building a release version you should revert to using the lua files loaded normally/internally.

### in-dat lua files:

Simply copy the in-dat lua file to `MGS_TPP\mod` , while retaining the internal path ex copy:

`-Whatever folder you extracted dat to-\Assets\tpp\motherbase\script\MbmCommonSetting.lua`

to

`MGS_TPP\mod\Assets\tpp\motherbase\script\MbmCommonSetting.lua`

Edit your external lua, then quit and start the game again and IH should load the external lua. If there's an error IH should log that to `MGS_TPP\mod\ih_log.txt` , search for: 'ERROR'

### in-fpkd lua files:

Fox automatically loads the lua files in the fpkd when it loads it, so these need a workaround to get them to load an external lua file instead.

1. Make a 'dev' folder in `MGS_TPP\mod\`, ex:

`MGS_TPP\mod\dev\`

2. Copy the fpkd lua you want to work on into that dev folder, rename it, just add something to the end of the name like

f30050\_sequence.lua to f30050\_sequence\_dev.lua

3. At top of the existing in-fpkd lua file add:

`local loadExternal=true`

`if loadExternal then`

`local fileName="f30050_sequence_dev.lua"`

`return InfCore.PCall(function()return InfCore.LoadSimpleModule(InfCore.paths.dev,fileName)end)`

`end`

Making sure the `fileName=` matches the external lua filename.

4. Copy the same block of code from `local loadExtenal` to the `end` to the top of the external dev lua.
Changing to `loadExternal=false`

or you'll get an infinite recursion of loading until it fails lol

6. Build/install your .mgsv

Then whenever the game loads the in-fpkd lua that will load the external dev lua, and (if you have debugMode on, via IH debug menu) it will log parsing errors to ih\_log.txt when it first loads.

When you're ready to do a release build just copy the \_dev lua back over the in-fpkd lua (and double check the in-fpk lua has the `loadExternal=false` from the external lua)

This method is useful depending on when the game loads/unloads the fpk.

For mission scripts it means you can just quit the game (or quit to ACC), edit your \_dev lua in MGS\_TPP\mod\dev\ then restart the game and it will used the edited lua.

For sideops scripts just exit the sideops loadArea, edit your external lua then return to the sideop loadArea, and it should load your external lua.
UIGB

The .uigb format is a binary file format used in Fox Engine to store a UiGraph, which encapsulates and manages a set of user interface assets. The format is still not fully reverse engineered.

## Overview

A UiGraph is a node graph format which contains five main types of nodes:

* UiPageNode
* UiPhaseNode
* UiEventNode
* UiActionNode
* UiOperationNode

In addition to containing nodes and edges, a UiGraph can reference external files such as .uilb (layout) files, .uia (animation) files, and even other .uigb files.

One of the primary challenges of understanding the format is the large number of hashes it uses. In addition to each node class name being hashed, properties are referenced by hash and often have hash values. While some have been uncovered, many still remain a mystery, making understanding what a given property does, much less its owning node class, a challenge.

There is also a large number of subclasses of the basic node types. Here are the ones which have currently been discovered.

## Format

There are two known .uigb formats: one used in GZ and one used in TPP. The GZ format has not yet been reversed, so this format specification refers exclusively to TPP.

### Header

* 0x0 - 0x3 (string): 'UIGB.' Format signature.
* 0x4 (uint8): Magic number. Always 1.
* 0x5 (uint8): Version number. 0 in GZ and 1 in TPP.
* 0x6 - 0x7 (uint16): Padding.
* 0x8 - 0x9 (uint16): Number of nodes.
* 0xA (uint8): Number of .uilb file references.
* 0xB (uint8): Number of .uigb file references.
* 0xC (uint8): Magic number. Always 1.

* 0xD (uint8): Number of Section 6 entries.
* 0xE - 0xF (uint16): Number of external files referenced.
* 0x10 - 0x13 (uint32): Number of StrCode32 hashes in the hash table.
* 0x14 - 0x17 (uint32): Node table offset.
* 0x18 - 0x1B (uint32): Layout table offset.
* 0x1C - 0x1F (uint32): Section 4 offset.
* 0x20 - 0x23 (uint32): Unknown.
* 0x24 - 0x27 (uint32): Section 6 offset.
* 0x28 - 0x2B (uint32): .uilb hash table offset.
* 0x2C - 0x2F (uint32): Number of bytes in Section 5.
* 0x30 - 0x33 (uint32): Unknown.
* 0x34 - 0x37 (uint32): Section 5 offset.