The game has a class named 'Archive' that looks like it handles BSA functionality. It should be relatively straightforward to decode - depending on what you need to do with it.
OBSE: initialize (version = 19.6 010201A0)oblivion root = E:\Program Files (x86)\Bethesda Softworks\Oblivion\plugin directory = E:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\checking plugin E:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\\ConScribe.dllSetOpcodeBase 000025A0RegisterCommand Scribe (25A0)RegisterCommand RegisterLog (25A1)RegisterCommand UnregisterLog (25A2)RegisterCommand GetRegisteredLogName (25A3)plugin E:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\\ConScribe.dll (00000001 ConScribe 00000006) loaded correctlychecking plugin E:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\\OBSE_Elys_Pluggy.dllSetOpcodeBase 00002330RegisterCommand GetEsp (2330)RegisterCommand CreateArray (2331)RegisterCommand DestroyArray (2332)RegisterCommand ArraySize (2333)RegisterCommand ArrayCount (2334)RegisterCommand SetInArray (2335)RegisterCommand SetFloatInArray (2336)RegisterCommand GetInArray (2337)RegisterCommand GetTypeInArray (2338)RegisterCommand RemInArray (2339)RegisterCommand FindInArray (233A)RegisterCommand FindFloatInArray (233B)RegisterCommand SetRefInArray (233C)RegisterCommand FindRefInArray (233D)RegisterCommand CopyArray (233E)RegisterCommand ArrayEsp (233F)RegisterCommand ArrayProtect (2340)RegisterCommand FirstInArray (2341)RegisterCommand DestroyAllArrays (2342)RegisterCommand PackArray (2343)RegisterCommand CreateString (2344)RegisterCommand DestroyString (2345)RegisterCommand SetString (2346)RegisterCommand StringEsp (2347)RegisterCommand StringProtect (2348)RegisterCommand StringLen (2349)RegisterCommand DestroyAllStrings (234A)RegisterCommand StringSetName (234B)RegisterCommand StringGetName (234C)RegisterCommand StringMsg (234D)RegisterCommand StringCat (234E)RegisterCommand UserFileExists (234F)SetOpcodeBase 00002378RegisterCommand RenFile (2378)RegisterCommand DelFile (2379)RegisterCommand StringToTxtFile (237A)RegisterCommand CopyString (237B)RegisterCommand IntToString (237C)RegisterCommand FloatToString (237D)RegisterCommand RefToString (237E)RegisterCommand IniReadInt (237F)RegisterCommand IniReadFloat (2380)RegisterCommand IniReadRef (2381)RegisterCommand IniWriteInt (2382)RegisterCommand IniWriteFloat (2383)RegisterCommand IniWriteRef (2384)RegisterCommand IniKeyExists (2385)RegisterCommand IniDelKey (2386)RegisterCommand EspToString (2387)RegisterCommand IniReadString (2388)RegisterCommand IniWriteString (2389)RegisterCommand ModRefEsp (238A)RegisterCommand GetRefEsp (238B)RegisterCommand StringToRef (238C)RegisterCommand StringCmp (238D)RegisterCommand FileToString (238E)RegisterCommand StringPos (238F)RegisterCommand StringToInt (2390)RegisterCommand StringToFloat (2391)RegisterCommand ArrayCmp (2392)RegisterCommand StringMsgBox (2393)RegisterCommand StringIns (2394)RegisterCommand StringRep (2395)RegisterCommand IntToHex (2396)RegisterCommand LC (2397)SetOpcodeBase 000023B0RegisterCommand FromTSFC (23B0)RegisterCommand ToTSFC (23B1)RegisterCommand StrLC (23B2)RegisterCommand CreateEspBook (23B3)RegisterCommand FmtString (23B4)RegisterCommand FixName (23B5)RegisterCommand ResetName (23B6)RegisterCommand HasFixedName (23B7)RegisterCommand csc (23B8)RegisterCommand StringSetNameEx (23B9)RegisterCommand StringGetNameEx (23BA)RegisterCommand FixNameEx (23BB)RegisterCommand IniGetNthSection (23BC)RegisterCommand IniSectionsCount (23BD)RegisterCommand RunBatString (23BE)RegisterCommand Halt (23BF)RegisterCommand RefToLong (23C0)RegisterCommand LongToRef (23C1)RegisterCommand FindFirstFile (23C2)RegisterCommand FindNextFile (23C3)RegisterCommand GetFileSize (23C4)RegisterCommand NewHudS (23C5)RegisterCommand DelHudS (23C6)RegisterCommand ScreenInfo (23C7)RegisterCommand HudS_X (23C8)RegisterCommand HudS_SclX (23C9)RegisterCommand HudS_Show (23CA)RegisterCommand HudS_Opac (23CB)RegisterCommand HudS_Align (23CC)RegisterCommand AutoSclHudS (23CD)RegisterCommand HudS_Y (23CE)RegisterCommand HudSEsp (23CF)RegisterCommand HudSProtect (23D0)RegisterCommand HudsInfo (23D1)RegisterCommand DelAllHudSs (23D2)RegisterCommand HudS_L (23D3)RegisterCommand rcsc (23D4)RegisterCommand HudS_SclY (23D5)RegisterCommand NewHudT (23D6)RegisterCommand DelHudT (23D7)RegisterCommand HudT_X (23D8)RegisterCommand HudT_SclX (23D9)RegisterCommand HudT_Show (23DA)RegisterCommand HudT_Opac (23DB)RegisterCommand HudT_Align (23DC)RegisterCommand AutoSclHudT (23DD)RegisterCommand HudT_Y (23DE)RegisterCommand HudTEsp (23DF)RegisterCommand HudTProtect (23E0)RegisterCommand HudTInfo (23E1)RegisterCommand DelAllHudTs (23E2)RegisterCommand HudT_L (23E3)RegisterCommand HudT_SclY (23E4)RegisterCommand PauseBox (23E5)RegisterCommand KillMenu (23E6)RegisterCommand SetHudT (23E7)RegisterCommand HudT_Text (23E8)RegisterCommand HudS_Tex (23E9)RegisterCommand SanString (23EA)RegisterCommand IsHUDEnabled (23EB)RegisterCommand IsPluggyDataReset (23EC)RegisterCommand FromOBSEString (23ED)RegisterCommand ToOBSEString (23EE)RegisterCommand HudT_Font (23EF)SetOpcodeBase 000023FFRegisterCommand PlgySpcl (23FF)plugin E:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\\OBSE_Elys_Pluggy.dll (00000001 OBSE_Elys_Pluggy 00000084) loaded correctlypatchedloading from C:\Users\Fox\Documents\My Games\Oblivion\Saves\Save 9 - Testguy - Waterfront, Level 1, Playing Time 00.09.00.obseReading mod list from co-saveLoading stringsLoading array variablesplugin has data in save file but no handlerDoLoadGameHook: C:\Users\Fox\Documents\My Games\Oblivion\Saves\Save 9 - Testguy - Waterfront, Level 1, Playing Time 00.09.00.essloading from C:\Users\Fox\Documents\My Games\Oblivion\Saves\Save 9 - Testguy - Waterfront, Level 1, Playing Time 00.09.00.obseOBSE: deinitialize
Problem signature: Problem Event Name: APPCRASH Application Name: Oblivion.exe Application Version: 1.2.0.416 Application Timestamp: 462392c7 Fault Module Name: obse_1_2_416.dll Fault Module Version: 0.0.19.6 Fault Module Timestamp: 4ce69d45 Exception Code: c0000005 Exception Offset: 0004fc45 OS Version: 6.1.7600.2.0.0.256.1 Locale ID: 1033 Additional Information 1: 27c8 Additional Information 2: 27c8ce5af7a07bedf550bd9c573901b3 Additional Information 3: e56e Additional Information 4: e56e9cfaf3cd1084b6b4c016d12ce64c
ScriptName renscanollnaturalref arg1array_var arg2short arg3ref objectrefref doorparentcellref teleportdoorrefstring_var nifpathstring_var objectnameshort arraysizefloat returnvalueBegin Function{arg1, arg2, arg3} ; arg1 = current cell ; arg2 = previous cell(s) ; arg3 = scan next cell if (arg2 == 0) let arg2 := ar_Construct Array endif if eval (ar_Find arg1 arg2) == -99999.0 let arraysize := ar_Size arg2 set arraysize to (arraysize+1) ar_Resize arg2 arraysize ar_Insert arg2 arraysize arg1 endif Print "Entered renscanollnatural function..." Print "Values: " + $arg1 + ", " + $arg2 + ", " + $arg3 set returnvalue to 0 SetFunctionValue returnvalue set objectref to Apple set objectref to GetFirstRefInCell arg1 Label 1 if (objectref != 0) if (objectref.IsInInterior == 0) ; bad. set returnvalue to 0 SetFunctionValue returnvalue set objectref to 0 GoTo 1 endif let objectname := objectref.GetName if (sv_Find "thisinteriorhaswindows" objectname > -1) ; override set returnvalue to 1 SetFunctionValue returnvalue set objectref to 0 Print "Found override item..." GoTo 1 endif if (objectref.GetObjectType == 28) ; static let nifpath := objectref.GetModelPath if (sv_Find "allnatural\" nifpath > -1 || sv_Find "niw\" nifpath > -1) ; all natural NIF! set returnvalue to 1 SetFunctionValue returnvalue set objectref to 0 Print "Found All Natural mesh..." GoTo 1 endif endif set objectref to Apple set objectref to GetNextRef GoTo 1 endif set objectref to Apple set objectref to GetFirstRefInCell arg1 Label 2 if (objectref != 0) if (objectref.GetObjectType == 24 && arg3 == 1) ; door if (objectref.IsLoadDoor == 1) Print "Found a load door..." set teleportdoorref to objectref.GetLinkedDoor if (teleportdoorref != 0) set doorparentcell to teleportdoorref.GetParentCell if eval (teleportdoorref.IsInInterior == 1 && (ar_Find doorparentcell arg2) == -99999.0) Print "Scanning next cell: " + $doorparentcell let arraysize := ar_Size arg2 set arraysize to (arraysize+1) ar_Resize arg2 arraysize ar_Insert arg2 arraysize doorparentcell let returnvalue := Call renscanollnatural doorparentcell arg2 arg3 SetFunctionValue returnvalue endif endif endif endif set objectref to Apple set objectref to GetNextRef GoTo 2 endif sv_Destruct nifpath sv_Destruct objectname let arg2 := ar_Null Print "Renscanollnatural returning value: " + $returnvalueEnd
Game Instance : 1 | Time : 12-09-2010 10-49-03 PM==================================================All Natural Tamriel: InitialisedRenIntStaticsNodeQuestScript: Player pressed activate key.RenIntStaticsNodeQuestScript: Starting - player is not in interior...Entered renscanollnatural function...Values: Vilverin, Array ID 134, 1Found a load door...Found a load door...Scanning next cell: Vilverin CanoselEntered renscanollnatural function...Values: Vilverin Canosel, Array ID 134, 1Found a load door...Found a load door...Scanning next cell: Vilverin WendeselEntered renscanollnatural function...Values: Vilverin Wendesel, Array ID 134, 1Found a load door...Found a load door...Scanning next cell: Vilverin Sel SancremathiEntered renscanollnatural function...Values: Vilverin Sel Sancremathi, Array ID 134, 1Found a load door...Found a load door...Renscanollnatural returning value: 0