Welcome to the AFK Mods bug tracker. In order to report an issue, you need to have a VALIDATED account to post one. Once you have followed the link the registration email sent you, please select a project from the drop down menu below. Select “Open New Issue” and fill out the form with as many details as possible.

Please also consider sending your bug report to Bethesda if you are reporting on an issue with Skyrim Special Edition, Fallout 4, or Starfield. Doing so will help everyone on all platforms.

Issue Data
Status: Investigating
Issue Type: Bug Report
Project: Unofficial Fallout 4 Patch
Component: Fallout 4: X02 Power Armor DLC
Category: Actors
Assigned To: Nobody
Platform: All
Severity: Very Low
Votes: 0
Watching: N/A
Opened By Glitchfinder on Mar 2, 2025 6:26 pm
Last Edited By Arthmoor on Mar 2, 2025 10:52 pm

Issue #34945: X-02 Power Armor: Script errors

 
The X-02 Power Armor addon presents an interesting variety of script errors in the log. The first and most obvious group is:
[03/02/2025 - 02:09:13PM] error: Unable to bind script ccBGSFO4115_:X02TerminalScript to  (001D2072) because their base types do not match
[03/02/2025 - 02:09:13PM] error: Unable to bind script ccBGSFO4115_:X02TerminalScript to  (001D1AF1) because their base types do not match
[03/02/2025 - 02:09:13PM] error: Unable to bind script ccBGSFO4115_:X02TerminalScript to  (00191EFB) because their base types do not match
[03/02/2025 - 02:09:13PM] error: Unable to bind script ccBGSFO4115_:X02TerminalScript to  (00191F08) because their base types do not match
[03/02/2025 - 02:09:13PM] error: Unable to bind script ccBGSFO4115_:X02TerminalScript to  (FE0019B5) because their base types do not match
[03/02/2025 - 02:09:13PM] error: Unable to bind script ccBGSFO4115_:X02TerminalScript to  (001AC2CC) because their base types do not match
[03/02/2025 - 02:09:13PM] error: Unable to bind script ccBGSFO4115_:X02TerminalScript to  (001D8830) because their base types do not match
[03/02/2025 - 02:09:13PM] error: Unable to bind script ccBGSFO4115_:X02TerminalScript to  (001E2305) because their base types do not match

This group happens because a script that extends Terminal has been bound to Terminal objects that are placed in the world. Objects in world expect ObjectReference type scripts and as a result the scripts fail to bind. However, the script still successfully binds and operates on the base object, meaning that it still functions as needed. In order to resolve this error without breaking the addon, we would need an ObjectReference script similar to the following:
ScriptName X02TerminalReferenceScript Extends ObjectReference

Struct QuestStage
  Int MenuSelection
  Int StageToSet
EndStruct

Quest Property MyQuest Auto Const mandatory
X02TerminalReferenceScript:queststage[] Property Digits Auto Const mandatory

Event OnInit()
  Terminal BaseObject = GetBaseObject() As Terminal
  RegisterForRemoteEvent(BaseObject, "OnMenuItemRun")
EndEvent

Event Terminal.OnMenuItemRun(Terminal akSender, Int auiMenuItemID, ObjectReference akTerminalRef)
  ; Skip if this object is not loaded, to prevent multiple copies of the terminal reference from running
  ; Without this, persistent references will all run the subsequent code together. This can be observed by
  ; the holotape sound effect rapidly playing multiple times if this check is removed.
  If (!Is3DLoaded())
    Return
  EndIf
  
  Int index = Digits.findstruct("MenuSelection", auiMenuItemID, 0)
  If index >= 0
    MyQuest.SetStage(Digits[index].StageToSet)
  EndIf
EndEvent

The above script can take the same properties that the existing script takes, while operating via the in-world ObjectReferences rather than the base Terminal objects. Switching the RelayTowerTerminal and ccBGSFO4115_ConsoleTerminal Terminal objects over to the above script and ensuring the properties retain the same data resolves those errors and prevents the change from breaking the quest.


Next up is the following error, also present at startup:
[03/02/2025 - 02:09:27PM] error: Property Digits on script ccBGSFO4115_:X02TerminalScript attached to  (FE001A7D) cannot be initialized because the value is the incorrect type

This is the result of the array property on ccBGSFO4115_HolotapeTerminal810 being empty. Since that property being empty means the script won't do anything in the first place, this error can be fixed by removing the script from this Terminal object. Presumably this is a leftover from a cut stage in the quest where a no longer implemented option in that terminal would prompt an objective.


After that comes the following:
[03/02/2025 - 02:09:27PM] warning: Property StageToSet01 on script ccBGSFO4115_:X02TerminalScript attached to  (FE00181A) cannot be initialized because the script no longer contains that property
[03/02/2025 - 02:09:27PM] warning: Property MenuNumber01 on script ccBGSFO4115_:X02TerminalScript attached to  (FE00181A) cannot be initialized because the script no longer contains that property

These are both properties that no longer exist, and this can be fixed by opening the script's properties on the ccBGSFO4115_HolotapeTerminal01 Terminal object. The Creation Kit will automatically purge the properties and prompt you to click OK to confirm the changes.


Finally, we have these two errors prompted by stage 100 of ccBGSFO4115_DM_Quest:
[03/02/2025 - 03:26:52PM] error: ccBGSFO4115_DM_Quest (FE001845): unknown quest objective 100.
stack:
	[ccBGSFO4115_DM_Quest (FE001845)].ccBGSFO4115_:Fragments:Quests:QF_ccBGSFO4115_DM_Quest_01000845.SetObjectiveDisplayed() - "<native>" Line ?
	[ccBGSFO4115_DM_Quest (FE001845)].ccBGSFO4115_:Fragments:Quests:QF_ccBGSFO4115_DM_Quest_01000845.Fragment_Stage_0100_Item_00() - "F:\_F4\CClub\Art\Raw\Creations\BGSFO4115\Source\Scripts\ccBGSFO4115_\Fragments\Quests\QF_ccBGSFO4115_DM_Quest_01000845.psc" Line 190
[03/02/2025 - 03:26:52PM] error: Object reference has no 3D
stack:
	[ (00043CDF)].Sound.play() - "<native>" Line ?
	[ccBGSFO4115_DM_Quest (FE001845)].ccBGSFO4115_:Fragments:Quests:QF_ccBGSFO4115_DM_Quest_01000845.Fragment_Stage_0100_Item_00() - "F:\_F4\CClub\Art\Raw\Creations\BGSFO4115\Source\Scripts\ccBGSFO4115_\Fragments\Quests\QF_ccBGSFO4115_DM_Quest_01000845.psc" Line 191

The first error is very straightforward: Objective 100 no longer exists, and that line of code should be removed. The second one is slightly more complicated but easy to fix. Bethesda is attempting to play a sound using a disabled reference, which fails and produces an error. While we could switch this line and the one after it that enables the object, the use of EnableNoWait means there is a chance of this error recurring due to race conditions. It would be better to place a new marker object that is enabled by default, add it as another property on the script, and then use that marker object rather than the existing one that also acts as an enable parent.

Comments

6 comment(s)
Arthmoor said:
 
For these:

error: Unable to bind script ccBGSFO4115_:X02TerminalScript to


My understanding of Papyrus tells me these scripts don't work at all since the game can't bind them to the appropriate objects. So the solution is much simpler than cooking up a whole new script. Simply edit them so they're extending ObjectReference properly. That's how every Terminal script I can find in the game has been written.

The only real question is how is it people haven't noticed the content isn't working properly since there's a lot of these terminals.

Glitchfinder said:
 
It's complicated because Terminals are pulling double duty. The base object type is Terminal, and a script that extends Terminal will run appropriately on the base object when the terminal is used, either via references placed in world or via holotapes or submenus that use that terminal. However, placing a terminal in-world creates an ObjectReference that has that Terminal as its base object type, and since Terminal does not extend ObjectReference, any script that extends Terminal will fail to apply to the in-world ObjectReference.

Despite this error, the scripts are still applying to and running on the base Terminal objects. This can be verified by removing the scripts, which has the following results:
  • The quest objectives to insert the holotapes into the radio towers will not update appropriately when you select the terminal entries to do so.
  • The final miscellaneous objectives (destroy the radio station or restore the radio station) will not be possible to show or complete because the journal entry that triggers them no longer sets a quest stage.


Essentially, it's like the difference between ActorBase Scripts and Actor scripts, except in this case there isn't an equivalent "Actor" script to handle things cleanly.

Comment #2 Mar 2, 2025 10:58 pm  Edited by Glitchfinder on Mar 2, 2025 11:10 pm
Arthmoor said:
 
I'm not ok with the option of adding a separate ObjectReference script to the 7 references that would need it. They'd be separate scripts and would not be properly keeping track of the current state of things.

If the script on the terminal base object is doing what it should, then that's probably enough despite the errors. However, even if the scripts were to be "removed" from the 7 references, that WILL NOT take effect on an existing save and there's no retro process that can force it. Right now all 7 of those refs are inheriting the script unaltered. So changing it to the proper ObjectReference type should be fine as none of them are expecting different properties.

Further, these relay tower objects are vanilla and they're all contained within RFGP records, which are in turn part of precombs, so the 7 references themselves cannot be edited without breaking the precombs.

So IMO the only option to eliminate the errors is to change the extension type on the script from Terminal to ObjectReference. The errors will go away, and they'll continue to function correctly since the base object doesn't need to be changed either and whatever tracking is being done won't be lost.

Either that, or we ignore these errors as they're not actually having an impact on being able to do the quest.

Comment #3 Mar 2, 2025 11:19 pm  Edited by Arthmoor on Mar 2, 2025 11:20 pm
Glitchfinder said:
 
I should clarify that I don't mean to add an ObjectReference script to each in-world reference. My initial testing involved adding the supplied script to the base Terminal objects (RelayTowerTerminal and ccBGSFO4115_ConsoleTerminal) rather than the in-world references, and then removing the original one provided by the addon. From a quick search, Bethesda only ever extended the Terminal script type in script fragments attached to Terminal objects, and the few terminals in the game that have scripts attached directly to them use ObjectReference scripts rather than Terminal scripts. This is corroborated by the fact that in order to attach a Terminal-type script to the Terminal object, you need to tick the checkbox to show incompatible scripts. All together, this indicates that the X-02 Power Armor and Hellfire Power Armor Creation Club addons both used the wrong script types for their terminals.

That said, if editing the references is the chosen approach, there are only three terminals to edit:
  • The new terminal X-02 adds to Mass Pike Tunnel
  • The terminal at Relay Tower OMC-810
  • The terminal at Relay Tower 0Sc-527


Editing ccBGSFO4115_:X02TerminalScript to change it to an ObjectReference script is not suitable, because it is also applied to Terminal records that will never have an ObjectReference and thus would break those ones instead.

Edit: I have attached an esp containing the terminal related changes I implemented while testing. This assumes you have added and compiled the small script in my initial post.



Attached Files:

X02Terminal.esp

Comment #4 Mar 2, 2025 11:27 pm  Edited by Glitchfinder on Mar 2, 2025 11:38 pm
Arthmoor said:
 
If a Terminal record never has a reference in game, how could it be broken? You could never access it to break it.

I don't see removing the initial script and adding a new one to replace it using the same name being any different from simply changing the existing one to the same inheritance type.

Glitchfinder said:
 
Because Terminals can also be accessed as submenus of other Terminals, or via holotapes which have their own separate references. When accessed this way, the Terminal never gains its own reference and is simply used as the base object instead. This means that these terminals will not function if ccBGSFO4115_:X02TerminalScript is changed to extend ObjectReference rather than Terminal:
  • ccBGSFO4115_HolotapeSubTerminal01
  • ccBGSFO4115_HolotapeSubTerminal02
  • ccBGSFO4115_HolotapeSubTerminal03
  • ccBGSFO4115_HolotapeSubTerminal04
  • ccBGSFO4115_HolotapeSubTerminal07
  • ccBGSFO4115_HolotapeTerminal527


There is also ccBGSFO4115_HolotapeTerminal02, which uses the script but appears to be fully unused.

Comment #6 Mar 3, 2025 12:08 am  Edited by Glitchfinder on Mar 3, 2025 12:13 am
Showing Comments 1 - 6 of 6