Index: oup/current/DataAccess/Access_OUP_ADB.pas
===================================================================
--- oup/current/DataAccess/Access_OUP_ADB.pas	(revision 231)
+++ oup/current/DataAccess/Access_OUP_ADB.pas	(revision 241)
@@ -35,4 +35,5 @@
     function GetRawList(FileID: Integer): TRawDataList; override;
     function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; override;
+    function GetRawsForType(RawType: String): TRawDataList; override;
 
     procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TStream); overload; override;
@@ -268,4 +269,6 @@
   else
     list.Sorted := True;
+  if ext = '*' then
+    ext := '';
   for i := 0 to GetFileCount - 1 do
   begin
@@ -490,5 +493,5 @@
 begin
   SetLength(Result, 0);
-  FQuery.SQL.Text := 'SELECT [src_link_offset],[size],[sep] FROM rawmap WHERE [src_id]=' +
+  FQuery.SQL.Text := 'SELECT [src_link_offset],[name],[size],[sep],[type] FROM rawmap WHERE [src_id]=' +
     IntToStr(fileid) + ' ORDER BY src_link_offset ASC;';
   FQuery.Open;
@@ -499,4 +502,5 @@
     i := 0;
     repeat
+      Result[i].Name      := FQuery.FieldByName('name').AsString;
       Result[i].SrcID     := fileid;
       Result[i].SrcOffset := FQuery.FieldByName('src_link_offset').AsInteger;
@@ -504,4 +508,5 @@
       Result[i].RawSize   := FQuery.FieldByName('size').AsInteger;
       Result[i].LocSep    := FQuery.FieldByName('sep').AsBoolean;
+      Result[i].RawType   := FQuery.FieldByName('type').AsString;
       Inc(i);
       FQuery.Next;
@@ -526,11 +531,44 @@
       Result := rawlist[i]
     else begin
+      Result.Name      := '';
       Result.SrcID     := -1;
       Result.SrcOffset := -1;
       Result.RawAddr   := -1;
       Result.RawSize   := -1;
-    end;
-  end;
-end;
+      Result.RawType   := '';
+    end;
+  end;
+end;
+
+
+function TAccess_OUP_ADB.GetRawsForType(RawType: String): TRawDataList;
+var
+  i: Integer;
+  rawlist: TRawDataList;
+begin
+  SetLength(Result, 0);
+  FQuery.SQL.Text := 'SELECT [src_id],[src_link_offset],[name],[size],[sep] FROM rawmap ' +
+    'WHERE [type]="' + RawType + '" ORDER BY src_id ASC, src_link_offset ASC;';
+  FQuery.Open;
+  if FQuery.RecordCount > 0 then
+  begin
+    FQuery.First;
+    SetLength(Result, FQuery.RecordCount);
+    i := 0;
+    repeat
+      Result[i].Name      := FQuery.FieldByName('name').AsString;
+      Result[i].SrcID     := FQuery.FieldByName('src_id').AsInteger;
+      Result[i].SrcOffset := FQuery.FieldByName('src_link_offset').AsInteger;
+      Result[i].RawAddr   := 0;
+      Result[i].RawSize   := FQuery.FieldByName('size').AsInteger;
+      Result[i].LocSep    := FQuery.FieldByName('sep').AsBoolean;
+      Result[i].RawType   := RawType;
+      Inc(i);
+      FQuery.Next;
+    until FQuery.EOF;
+  end;
+  FQuery.Close;
+end;
+
 
 
Index: oup/current/DataAccess/Access_OniArchive.pas
===================================================================
--- oup/current/DataAccess/Access_OniArchive.pas	(revision 231)
+++ oup/current/DataAccess/Access_OniArchive.pas	(revision 241)
@@ -39,4 +39,5 @@
     function GetRawList(FileID: Integer): TRawDataList; override;
     function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; override;
+    function GetRawsForType(RawType: String): TRawDataList; override;
 
     procedure LoadRawOffset(LocSep: Boolean; RawAddr, Size: Integer; var target: TStream); overload;
@@ -285,4 +286,6 @@
   list := TStringList.Create;
   list.Sorted := True;
+  if ext = '*' then
+    ext := '';
   for i := 0 to GetFileCount - 1 do
   begin
@@ -489,4 +492,27 @@
 begin
   Result := RawLists.GetRawList(FConnectionID, FileID);
+end;
+
+
+function TAccess_OniArchive.GetRawsForType(RawType: String): TRawDataList;
+var
+  i, j: Integer;
+  dats: TStrings;
+  list: TRawDataList;
+begin
+  dats := nil;
+  dats := GetFilesList(MidStr(RawType, 1, 4), '', True, ST_IDAsc);
+  for i := 0 to dats.Count - 1 do
+  begin
+    list := GetRawList(StrToInt(MidStr(dats.Strings[i], 1, 5)));
+    for j := 0 to Length(list) - 1 do
+    begin
+      if list[j].RawType = RawType then
+      begin
+        SetLength(Result, Length(Result)+1);
+        Result[High(Result)] := list[j];
+      end;
+    end;
+  end;
 end;
 
Index: oup/current/DataAccess/DataAccess.pas
===================================================================
--- oup/current/DataAccess/DataAccess.pas	(revision 231)
+++ oup/current/DataAccess/DataAccess.pas	(revision 241)
@@ -50,4 +50,5 @@
     function GetRawList(FileID: Integer): TRawDataList; virtual; abstract;
     function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; virtual; abstract;
+    function GetRawsForType(RawType: String): TRawDataList; virtual; abstract;
 
     procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TStream); overload; virtual; abstract;
