LarannKiar Posted April 19, 2024 Share Posted April 19, 2024 Due to the upcoming Next-Gen update, I took a deeper look at Papyrus, the compiler and the VM.. I'm currently making some Papyrus functions to help with diagnosing any possible script related changes.. I'll likely add these to Garden of Eden SE v17.4: Function LogScriptObjects() native global Function LogScriptsData(bool abIncludeNative = false, bool abIncludeNonNative = true) native global String[] Function GetScriptObjectTypes() native global [2024-04-19 06:02:53.780] [ F4SE log ] [info] [Objects.h:14180] LogScriptObjects --> attachedScriptArraySize [2] | iter [0] | ScriptObject [valid] | ScriptObjectIsValid [true] | ObjectTypeInfo [valid] | TypeInfoName [WorkshopFloraDamageHelperScript] | ScriptObjectHandle [281474959973541] | FormType [64] | StringFormType [REFR] | TypeAcquiredForHandle [true] | ObjectAddress [2050D3CE550] | FormObjectValid [valid] | GameFormValid [valid] [2024-04-19 06:08:12.225] [ F4SE log ] [info] [Objects.h:14044] LogScriptsData ---> [Function: PlaceMyLights | Script ProjectorScript] [MemberFuncCount: 12 ] [bAcquiredLineCount: 1] [lineCount: 12] [instuctionAddress: 205031FA6C0] [sDescTable: ::temp29 [0], SlideNumber [1], count [2], ::temp30 [3], ::temp31 [4], ::temp32 [5], ::nonevar [6], newLight [7], ] [ParamCount: 0] [EntryCount: 8] [tableAddresses: 205031F2EE8 [0], 205031F2EF8 [1], 205031F2F08 [2], 205031F2F18 [3], 205031F2F28 [4], 205031F2F38 [5], 205031F2F48 [6], 205031F2F58 [7], ] [sTypeInfoName: ObjectReference [3], Light [4], Form [5], ObjectReference [7], ] [lineNumbers.address: 205031E9530] [Function.address: 20503228E80] [NamedStateCount: 0] [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [91] is IdleMarker [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [90] is HeadPart [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [89] is WordOfPower [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [88] is TextureSet [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [87] is Holotape [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [86] is Book [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [85] is Form [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [84] is AssociationType [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [83] is ConstructibleObject [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [82] is Idle [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [81] is Scene [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [80] is DefaultObject [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [79] is VisualEffect [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [78] is Quest [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [77] is Potion [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [76] is Topic [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [75] is TopicInfo [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [74] is Terminal [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [73] is GlobalVariable [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [72] is ReferenceAlias [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [71] is Shout [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [70] is RefCollectionAlias [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [69] is LocationAlias [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [68] is ImageSpaceModifier [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [67] is Actor [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [66] is ActiveMagicEffect [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [65] is SPELL [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [64] is SoundCategorySnapshot [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [63] is LeveledActor [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [62] is Weather [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [61] is Ingredient [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [60] is OutputModel [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [59] is InstanceNamingRules [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [58] is WorldSpace [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [57] is ObjectMod [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [56] is SoulGem [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [55] is Activator [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [54] is Location [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [53] is CameraShot [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [52] is ScriptObject [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [51] is watertype [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [50] is matswap [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [49] is SoundCategory [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [48] is MovableStatic [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [47] is Door [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [46] is Scroll [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [45] is Class [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [44] is Alias [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [43] is LeveledSpell [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [42] is MagicEffect [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [41] is MiscObject [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [40] is Enchantment [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [39] is Furniture [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [38] is Keyword [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [37] is Armor [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [36] is armoraddon [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [35] is Package [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [34] is MusicType [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [33] is Explosion [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [32] is ActorBase [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [31] is ActorValue [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [30] is LocationRefType [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [29] is ObjectReference [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [28] is equipslot [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [27] is Perk [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [26] is TalkingActivator [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [25] is Cell [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [24] is LeveledItem [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [23] is Weapon [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [22] is EffectShader [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [21] is Container [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [20] is Outfit [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [19] is ShaderParticleGeometry [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [18] is Flora [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [17] is VoiceType [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [16] is ImpactDataSet [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [15] is Faction [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [14] is Ammo [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [13] is Key [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [12] is Race [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [11] is Hazard [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [10] is message [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [9] is FormList [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [8] is Action [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [7] is EncounterZone [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [6] is PROJECTILE [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [5] is Sound [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [4] is STATIC [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [3] is Light [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [2] is InputEnableLayer [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [1] is Component [04/19/2024 - 06:11:52AM] GetScriptObjectTypes at Index [0] is CombatStyle They're still in beta, signitures and log structures may change.. but they may be able to help with identifying Forms with attached scripts (LogScriptObjects logs >70k lines) if you're still interested. Link to comment Share on other sites More sharing options...
PJMail Posted April 20, 2024 Author Share Posted April 20, 2024 It isn't clear to me what the last 2 calls are returning - or more accurately - what context they are reporting on... A single Script, object, save, or the entire game. Anyway, I am sure that will become clear. I hope you won't have too much work adapting GOESE when that update drops... Link to comment Share on other sites More sharing options...
LarannKiar Posted April 20, 2024 Share Posted April 20, 2024 (edited) 15 hours ago, PJMail said: It isn't clear to me what the last 2 calls are returning - or more accurately - what context they are reporting on... A single Script, object, save, or the entire game. In their current states: GetScriptObjectTypes return all form typed ScriptObjects the engine knows in a String[]. These are scripts objects designed to be attached to game objects, e.g. "F4SE" is not in the list but "Form", "RefCollectionAlias" and "ActiveMagicEffect" are. LogScriptObjects logs all Papyrus script objects (the instances) existing in the memory and tries to locate the BoundGameObjects they're attached to. Native VM functions sometimes (seem intentionally?) don't locate the game object though ("unattached Script instances"?) that's why the many "IsValid" checks. LogScriptsData iterates the map of compiled scripts, then loops through the scripts' functions and events one by one to output some data. Instruction opcodes are not in the output. All functions query the VM to for script data that was loaded in the memory by the vanilla code. They, especially LogScriptsData, were actually made to help me identify possible changes to vanilla Papyrus scripts. If BGS decides to edit some then recompile all, it might prove difficult to determine which ones were actually edited, and how. Comparing the scripts pre-post update may reveal these.. Beyond that, having access to script instances and objects can help with identifying or maybe even debugging bad script data ("Set" and "Remove" functions we be a bit too ambitious though..). 15 hours ago, PJMail said: Anyway, I am sure that will become clear. I hope you won't have too much work adapting GOESE when that update drops... GOESE functions are located by the code through the Address Library, including the event dispatchers. The Address Library will (supposedly) greatly speed up things. I don't know if BGS changed class structures. Edited April 20, 2024 by LarannKiar Link to comment Share on other sites More sharing options...
Recommended Posts