There are a number of features of this Mod that can be expanded apon by other mods, and are fully supported now and in the future.
Any other changes to this mod by other 'patch' mods is not supported and is likely to break in future updates.
repackaging this mod with changes is NOT allowed or supported.
Supported areas of change are:

Extra Paintjobs/Vertibird 'skins':
The Formlist FPV_Paintjobs can have extra "outfits" added to it. These can then be selected in the Holotape under "Vertibird Skin", or via the Recall Beacon menu item "Select Paintjob". In the Holotape they will appear as "Unique2" up to "Unique9".
Outfits must be buillt the same way as the existing "FPV_Outfit_Skinned" one. i.e. An outfit contructed of an Armor that is  the basic vertibird skin (FPVertibirdSkin) with a material swap to map to new bgsm files that point to the new texture files.
You only need Materialswaps for Vertibird01.bgsm, Vertibird02.bgsm,Vertibird03.bgsm,Vertibird04.bgsm,Vertibird05.bgsm and Vertibird07.bgsm.
Vertibird06, Vertibird08, and the VertibirdxxAlpha matswap and DDS files are not used.
Duplicate these 6 vertibirdxx.bgsm items with your own material swap for each new color scheme (outfit) you add.

Make your own directories for your material swap (bgsm) and texture (dds) files, do not use the FPVertibird ones.
Make sure you do not overide the first 2 items in the FPV_PaintJobs Formlist.
You can (optionally) override the message FPV_SelectPaintjob to name your extra skins (otherwise they will show as 'Unique2', 'Unique3' etc).

NOTE: From V1.6.3-8 (Hotfix 8) the Tail and Wing OMODS (*vertibirdLwing*, *vertibirdRwing*, *vertibirdTail*) are no longer used so do not need to be included in your Vertibird Skins (only include the Matswap). Look at the updated FPV_Outfit_Skinned in FPV_Armored.esp.

Extra Minigun Mods:
The Formlist FPV_minigun_mods can be overidden to add new Omods (or replace existing ones), and the message FPV_SelectMiniGunMod (which contains their descriptions), so they can be selected via the Inflight Menu. These Omods must basically be Minigun barrel mods, with the extra effects coming from the projectiles. Unfortunately the Holotape or MCM setting for Minigun Mods won't reflect these changes.
Note: The FPVertibird-DLCRobotFix.esp also adds one more Omod (Tesla Beam) so expand on this mod.

NOTE: If you change the Ammo a Minigun OMOD uses (from normal 5mm) then you need also set up the Formlist FPV_MiniGunAmmo with the correct Ammo for each mod. This is because there is no way in Papyrus to determine what Ammo an OMOD specifies.

Extra Minigun Scopes:
The Formlist FPV_minigun_Sights can have new/changed Omods, and the message FPV_SelectMiniGunScope, added to it.
These Omods must basically be  Minigun Scope mods.

Extra Front Guns Mods:
The Formlist FPV_Frontgun_mods can have new/changed Omods, and the message FPV_SelectFGums, added to it.
These Omods are also Minigun barrel mods.

NOTE: If you change the Ammo a Front Guns OMOD uses (from the standard) then you need to update the Formlist FPV_FrontGunAmmo accordingly.
(in case the FPVNoInfiniteAmmo.esp mod is installed to make the Front Guns use Ammo)

Changing the "Hull Armor" Level:
All FPVertibirds have an ActorValue "FPV_Hull_Damage_Threshold" (the initial value comes from the FPV_PersonalVertibird record) that specifies how much damage is deflected by the Hull from ballistic weapons. This can be modified for an individual VB however you want (say by an 'Armor Plating' mod below).

Creating your own "Armor Plating" mod:
Use one of the existing Armor Plating as an example, but for an "Armor" to be equipped and used properly by FPVertibirds it must have the following:
ETYP - Equipment Type: Potion (or leave it blank)
RNAM - Race: VertibirdRace
KWDA - Keywords: PlayerCannotEquip, ObjectTypeArmor (at least)
MODL - Armor Addon: FPVArmorAA

Replacing the Vertibird Mesh/Model (FPV Replacer):
If you have a working Vertibird replacement model then, to use that model to replace all FPV's, you need to override 2 records with your patch mod.
FPVertibirdSkin (Armor Addon) - replace the World model with your new Nif.
FPV_ModelRestrictions (Global) - 0 = F04 Vertibird with special FPV skeleton (2nd Gunner position and Cat seat)
1 = As above, but No Minigun in Doorway
2 =
No Minigun in Doorway, No Doors, no 2nd Gunner, No Cat Seat
3 = No Minigun in Doorway, No Doors, but has 2nd Gunner Position and Cat Seat.

Replacing the Vertibird Race:
If you need to change the skeleton of the Vertibird (to match your changed Mesh, or move the Seating Positions) then this can only be done by creating a new race (based on the VertibirdRace). Then override the FPV_PersonalVertibird NPC record to change the Race to your new Race.

Alternative Flying Machine Models (Non Replacer):
If you want to add a separate recipe for a new Flying Machine (using all the functionality of FPV) then make a new copy of FPV_PersonalVertibird record in your Patch Mod, and modify that with your new name, race, and skin. It must be based on the FPV_VBTemplate template for it to work. If this new model has restricted functionality then add the ActorValue "
FPV_Restrictions" onto it with a value of 0,1,2 or 3 (same settings as FPV_ModelRestrictions - see above).
Look at My Enclave Vertibird Mod for an example of how to do this.

NOTE: Your Flying Machine will need it's own Race as the Skeleton.nif is defined in the Race, and the location of the Seats is defined in the "BSConnectPoint::Parents" node of the Skeleton.nif. Make sure your new race has VertibirdRace as the Subgraph Template.

Fusion Core Recycle Mod Support:
Selecting "Spent Fusion Cores sent to Home" (or Player) causes a spent Fusion Core to be returned to Home Workshop (or Player Inventory). If your Recycler Mod has a special item to represent a 'rechargeable' Core, then you can replace the AmmoFusionCore item in the LL_FPV_EmptyCore Leveled item list with your Mod's Item.

Boarding by other Races:

The Formlist FPV_Allowed_Races specifies what races can be passengers on the Vertibird. You can add further races if they support Vertibird travel. Note that the RobotsDLC addon adds 4 robot races, so add your races after these. Better still use list injection, but you should not have to alter this list (see below).

PLEASE NOTE:

- The race of a Companion does not have to be in this list if they have a Vertibird Attach keyword (such as p-AttachPassenger) OR has ActorTypeHuman keyword (e.g. Children)
- If they don't you can give them an Attach keyword by crafting a "Passenger Token" and giving it to them, or by making them wear the Pilot/Copilot/etc hats/rings.
- If they still don't board it may be they aren't registered correctly with the Game's Followers system. Try setting "Passengers are: All Followers" in holotape/MCM
- If they still don't then it will be because they have no animations set up in their race for boarding a Vertibird, or have a Quest stopping them board.

Creating your own "seat" allocation items:
The existing scripts in this mod can be used on any item you create to make an NPC a passenger and sit in a certain seat.

The script fpvertird:FPV_token can be added to any item that can be placed in an NPC's inventory. When the NPC is given an item with this script they will board the Vertibird into the specified seat (defaults to passenger seat if no properties on it).
A property on this script called VertibirdSeat defines the seat they take. This (Int32) values are from 0 to 7 and mean: SeatedPassenger, CoPilot, Pilot, RightStanding, LeftStanding, Gunner, Dogmeat, 2ndGunner.

A second script fpvertibird:FPV_CopilotHat needs to be on an item that is Worn. When the NPC equips an item with this script they will board the Vertibird into the specified seat (defaults to CoPilot seat if no properties on it).
A property on this script called VertibirdSeat defines the seat they take - same as the above script.

Note: the FPV_Passenger property is only required to be filled if you want this item to also work like a "Passenger token" (i.e. will work on non-companions) when using the setting "Passengers are: CC Faction OR have Passenger Token". Basically leave it off.

Replacing the Existing "Hats":
The mod already has an optional ring version, but if you have a better hat variant then override the existing 'hats' Armor items FPV_Pilot_hat and FPV_CoPilot_Hat with your own clothing items. Just make sure you keep the scripts attached.

Replacing The Minigun:
The MCM setting "Does the Minigun use your ammunition?"  must be set to "Modded", then the Vertibird uses the standard "Minigun_Vertibird_Player" weapon, which you can modify or replace with any weapon compatible with Vertibirds. There are a number of Mods that already replace the Vertibird Minigun and have no issues. Note: when set to "Modded" you can still change the Projectile and Scope mods - but these may not be compatible with a non-miniguns.
Also note that the Minigun used by companions is "Minigun_Vertibird" so this needs to be modified too.

Different Vertibird Construction requirements:
The Workshop_co_FPVertibird record can be overriden to change the build requirements of the Vertibird - but the rest of the record must remain unchanged.

Replacing the Pilot:
The FPV_VertibirdPilot NPC template in this mod can be replaced with any NPC you like. The Pilot is purely cosmetic. The only important requirements are:
- they have animations for Piloting a Vertibird.
- they have the same (at least) keywords as the Existing Pilot template.
- their main AI package keeps them in the area of the Vertibird, and work like the included ones.
- ideally they should fit in the cockpit - but if you manage to make a Deathclaw pilot then go for it!
- See "FPV - Interactive Pilot", or the included "BoS Pilots" mods for ideas.

NOTE: FPV_VertibirdPilot is the ActorBase used to create 'Random' (leveled) Pilots when the Pilot Setting (FPVPilotMortality) is set to 0.
If it is set to > 1 then the NON leveled ActorBase FPVEquipablePilotBase is used instead. This ActorBase MUST NOT use any leveledNPC templates as otherwise it will get Inventory/Clothing resets. It is meant for Fixed Pilots that you want to equip individually.

Replacing the Command menu:
You can create your own Vertibird Control menu/system, such as making a Pilot that you talk to, or a control console.
- Set the Global FPVNoControlMenu to 2.0 in you mod to disable the in-flight Command menu available from the Pilot.
- You will need to script your own operations then by calling the command procedure on the vertibird. Below is example code.
- It is also possible to receive a script event when the Vertibird lands (for your own 'task completed' processes).
- NOTE: Make sure you at least offer the same functionality as the existing in-flight Control menu if you plan to disable it for the Pilot.

Manual Flying the Vertibird Via scripts:
The Onboard menu also gives manual flying options if F4SE is not installed, which calls a Script you can also call in your mod.
Note this is only for Player commands, it is NOT for remote control flying of a Vertibird as that is untested.
See the following Sample (FPV_ManualFlight) for more details.

Sample Command scripts:
;         Find your 'current' vertibird:
;
Keyword FPVRecallLink = Game.GetFormFromFile(0x82D, "FPVertibird.esp") as keyword
FPVertibird:FPVertibirdScript My_Vertibird = Game.GetPlayer().GetLinkedRef(FPVRecallLink) as FPVertibird:FPVertibirdScript
;
;Or the Pilot's Vertibird:
;
Keyword FPVLinkPilot = Game.GetFormFromFile(0x80E, "FPVertibird.esp") as keyword
FPVertibird:FPVertibirdScript My_Vertibird = Self.GetLinkedRef(FPVLinkPilot) as FPVertibird:FPVertibirdScript
;
;
;        Command the Vertibird:
;
ObjectReference oDest = None
int iComm =
;        0 = Pick Travel Destination from pop-up Settlement Menu
;        1 = Travel to oDest (if =None, then use Home Settlement)
;        2 = as above + unload Inventory (Only unload if Home Settlement)
;        3 = as above then return to player
;        4 = Orbit around oDest (if =None use Player)
;        5 = Immediately Land near Player (or Land if Player onboard)
;        6 = Set Home Settlement via pop-up menu
;        7 = Change Paintjob via a Menu
;        8 = Recreate Pilot (if oDest = None), or Replace Pilot with new NPC (oDest = NPC)
;        9 = Set this Vertibird as Current
;        10= Change Front Guns Mod via a menu    (only if player NOT onboard)
;        11= Change MiniGun Mod via a Menu        (only if player IS onboard)
;        12= Change MiniGun Scope via a Menu        (only if player IS onboard)
;13= Reset Vertibird    (only if player & Companions NOT onboard)
;        14= Passengers board/Exit (Only if not Flying)
;        15= Jump Out                    (Passengers jump out too if Hovering)
;16= Bring up change Vertibird name box.
;        17= Store/Return Power Armor
;18= Set Vertibird Passive (stop Combat)
;19= Repair Vertibird using RepairKit in your (or VB's) Inventory
;
My_Vertibird.FPV_DoCommand(iComm,oDest)
;
;    Manual Flight Commands to Vertibird:
;
int iComm =
;        1 = TakeOff to Manual Hover        
;        2 = Engage Manual Hover (if on Auto) - same as 3
;        3 = Stop and Hover (if flying)
; Start/continue Cruising if on Manual
;        4 = Bank Left
;        5 = Bank Right    
;        6 = Fly Forward
; If Hovering on manual
;        7 = Spin        
;        8 = Increase Altitude
;        9 = Decrease Altitude
;      10 = Drop to Ground Hover
; Force Landing
;      11 =  Land on nearest Landing Pad  
;
My_Vertibird.FPV_ManualFlight(iComm)
;
;Display the In-flight Menu
;
My_Vertibird.FPV_OnboardMenu()
;
;Get location of Portable Vertipad in Worldspace of Vertibird.
;
ObjectReference oDest = My_Vertibird.FPV_GetVertipadMapMarker()
;
;Get % amount of Fuel this vertibird has remaining (returns 100 if Fuel consumption disabled).
;
Float PercentFuelRemaining = My_Vertibird.FPV_GetFuelRemaining()
;
;Get Current OMod# on Front Guns (0=5mm, 1=Laser, 2=Plasma, 3=Missiles)
;
Int FrontGunsMod = My_Vertibird.FPV_CurrFrontGunsMod()
;
;Get amount of Ammo in Cargo Hold for these front Guns (if VB uses Ammo). -1 = Unlimited.
;
Int FrontGunsAmmoCount = My_Vertibird.FPV_CurrFrontGunsAmmo()
;
;Get Home Settlement of Vertibird
;
Location VBHomeLocation = My_Vertibird.Get_HomeSettlement()
;
;         Register for Vertibird Events (optional)
;
FPVertibird:FPVEventProxyScript FPVEventsSource = Game.GetFormFromFile(0x863, "FPVertibird.esp") as FPVertibird:FPVEventProxyScript
RegisterForCustomEvent(FPVEventsSource,"FPVertibirdEvent")
RegisterForCustomEvent(FPVEventsSource,"FPVPilotEvent")
;
;        Receive Vertibird events
;
Event FPVertibird:FPVEventProxyScript.FPVertibirdEvent(FPVertibird:FPVEventProxyScript aSource, Var[] kargs)
    Int iAction = kargs[0] as int
; Actions: 0 = VB Created, 1 = VB deleted, 2 = VB Taking Off, 3 = VB Landed, 4 = Enable Vertipad Lights, 5 = Disable Vertipad Lights
    ObjectReference aVertibird = kargs[1] as ObjectReference; Vertibird ID (actions 0-3), Vertipad ID (actions 4,5)
EndEvent
;
;        Receive Pilot Events
;
Event FPVertibird:FPVEventProxyScript.FPVPilotEvent(FPVertibird:FPVEventProxyScript aSource, Var[] kargs)
    Int iAction = kargs[0] as int; Actions: 0 = Pilot created, 1 = Pilot deleted
    ObjectReference aPilot = kargs[1] as ObjectReference; Pilot ID
EndEvent
;
;(Updated for V1.6.3-8 and later)

Article information

Added on

Edited on

Written by

PJMail
  翻译: