Quake 1 PAK dateien Entpacker von ???
Also hab mal ne Code erstellt womit man PAK dateien von Quake 1 und 2 auslesen/entpacken kann. Das ding ist gut um den ordner und ein besser übersicht zu haben :)

[code:1:d2d51982c5]
; -----------------------------------------------------------------------------------------------------
; Quake - Data Pack Code
; Source Code by Devastator
; Sequence Basic - http://sequence.rockt.de/
; -----------------------------------------------------------------------------------------------------

Type PakFile
Field KopfZeile$
Field PakBank
End Type

Type ExportFiles
Field File$
Field SrcDir$
End Type

; -----------------------------------------------------------------------------------------------------
; Ladet eine Pak in den Speicher
; PakDatei.PakFile=LoadPakFile(Datei$)
; -----------------------------------------------------------------------------------------------------

Function Load_PakFile.PakFile(File$)
If Instr(File$,".")=0 Then File$=File$+".pak"
If FileType(File$)=0 Then RuntimeError "PAK File not found !!"
FileS=FileSize(File$)+1
Temp.PakFile=New PakFile
TempPakBank=CreateBank(FileS)
Filein=OpenFile(File$)
ReadBytes TempPakBank,Filein,0,FileS
CloseFile Filein
For z=0 To 3
Byte=PeekByte(TempPakBank,z)
FileErkennung$=FileErkennung$+Chr$(Byte)
Next
If FileErkennung$<>"PACK" Then RuntimeError File$+" hat das falsche Format"
HeadOffset=PeekInt(TempPakBank,4)
HeadSize=PeekInt(TempPakBank,8)
HeadSize=HeadOffset+HeadSize
Repeat
HeadStart=HeadOffset
HeadEnde=HeadOffset+64-8
FileName$=""
For Packet=HeadStart To HeadEnde
Char=PeekByte(TempPakBank,Packet)
If Char>0 Then FileName$=FileName$+Chr$(Char): Else Exit
Next
HeadOffset=HeadOffset+56
FileOffset=PeekInt(TempPakBank,HeadOffset)
Size=PeekInt(TempPakBank,HeadOffset+4)
HeadOffset=HeadOffset+8
Tempkopfzeile=Tempkopfzeile+Lower$(FileName$)+Chr$(34)
Tempkopfzeile=Tempkopfzeile+FileOffset+"|"
Tempkopfzeile=Tempkopfzeile+Size+"?"
If HeadOffset=>HeadSize Then Exit
Forever
Tempkopfzeile=Replace$(Tempkopfzeile,"/","")
Return Temp
End Function

; -----------------------------------------------------------------------------------------------------
; Exportiert eine Datei aus der Pak Datei
; ExportPakFile PakBank,Datei$(,Zum Verzeichniss)
; -----------------------------------------------------------------------------------------------------

Function Export_PakFile(Temp.PakFile,file$,ToDir$="")
file$=Lower$(file$)
ScanFile=Instr(Tempkopfzeile,file$+Chr$(34))
If ScanFile=0 Then
Return
Else
SuchDir$=ToDir$+file$
Repeat
SucheDirs=Instr(SuchDir$,"")
If SucheDirs>0 Then
CheckVerz$=Left$(SuchDir$,SucheDirs-1)
If FileType(CheckVerz$)<>2 Then CreateDir Dest$+LastVerz$+CheckVerz$
SuchDir$=Replace$(SuchDir$,CheckVerz$+"","")
LastVerz$=LastVerz$+CheckVerz$+""
Else
Exit
EndIf
Forever
export.exportfiles=New exportfiles:exportfile=file$:exportsrcdir=ToDir$
KopfZeile$=Mid$(Tempkopfzeile,ScanFile)
Kopf=Instr(KopfZeile$,Chr$(34))
Offset=Instr(KopfZeile$,"|")
Size=Instr(KopfZeile$,"?")
Fileout=WriteFile(ToDir$+file$)
WriteBytes TempPakBank,Fileout,Mid$(KopfZeile$,Kopf+1,Offset-Kopf),Mid$(KopfZeile$,Offset+1,Size-Offset)
CloseFile Fileout
EndIf
End Function


; -----------------------------------------------------------------------------------------------------
; Prüft ob die Gewählte Datei in der Pak Datei vorhaden ist
; ExportPakFile PakBank,Datei$
; -----------------------------------------------------------------------------------------------------

Function Exist_PakFile%(Temp.PakFile,file$)
ScanFile=Instr(Tempkopfzeile,file$+Chr$(34))
If ScanFile=0 Then Return 0:Else Return 1
End Function

; -----------------------------------------------------------------------------------------------------
; Prüft zu zuerst ob die Datei in einen Ordner vorhaden ist wenn sie es nicht ist wird sie von der
; Pak Datei Entpackt und das Verzecihniss wird dann automatisch zurück geliefert.
; GrafikSound=LoadImage(LocalFile$(Datei$,SourceDir$))
; -----------------------------------------------------------------------------------------------------

Function Local_File$(ScanFile$,SrcDir$)
If FileType(ScanFile$)
Return ScanFile$
Else
File$=Lower$(Replace$(ScanFile$,SrcDir$+"",""))
For PakFiles.PakFile=Each PakFile
If Exist_PakFile(PakFiles,File$)
TempDir$=SystemProperty$("TEMPDIR")
If FileType(TempDir$+File$)
Return TempDir$+File$
Else
Export_PakFile PakFiles,File$,TempDir$
Return TempDir$+File$
EndIf
; Else
; RuntimeError ScanFile$+" konnte nicht gefunden werden"
EndIf
Next
EndIf
End Function

; -----------------------------------------------------------------------------------------------------
; Löscht alle Dateien aus den Temp Verzeichniss die mit LocalFile Entpackt wurden sind
; DeleteExportPak
; -----------------------------------------------------------------------------------------------------

Function Delete_ExportPak()
For export.exportfiles=Each exportfiles
DebugLog exportsrcdir+exportfile
DeleteFile exportsrcdir+exportfile
Lang=Len(exportfile)
Repeat
If Lang=0 Then Exit
If Mid$(exportfile,Lang,1)="" Then DeleteDir exportsrcdir+Left$(exportfile,Lang-1)
Lang=Lang-1
Forever
Delete export
Next
End Function

; -----------------------------------------------------------------------------------------------------
; Listet eine Pak Datei auf
; ListPakFile PakBank,Zeigen,LogDatei$
; -----------------------------------------------------------------------------------------------------

Function List_PakFile(Temp.PakFile,Hide=1,LogFile$="")
KopfZeile$=Tempkopfzeile
If LogFile$<>"" Then LogOut=WriteFile(LogFile$)
Repeat
ScanFile=Instr(KopfZeile$,file$+Chr$(34))
If ScanFile=0
Exit
Else
ScanSize=Instr(KopfZeile$,"?")
If Hide=1 Then Print Left$(KopfZeile$,ScanFile-1)
If LogFile$<>"" Then WriteLine LogOut,Left$(KopfZeile$,ScanFile-1)
KopfZeile$=Mid$(KopfZeile$,ScanSize+1)
EndIf
Forever
If LogFile$<>"" Then CloseFile LogOut
End Function
[/code:1:d2d51982c5]

Wer ein paar fragen hat, soll sie nur stellen :D
===
von ???
Moin.

Ehm... dir ist schon klar, dass du eben nen ZIP Entpacker gecodet hast? Denn eine PAK datei von Quake ist ja nichts anderes als ne ZIP file ...

cu, ST.
===
von ???
Ist doch auch gut :)
===
von ???
Moin.

Ich meinen meinen letzten Post natürlich Positiv. Den einzigsten ZIP entpacker den ich für BB kenne ist auf BlitzBasic.com und als DLL vorhanden.

Aber wenn ich mir den Quellcode so ansehe, dann muss das ein älteres ZIP Format sein, dass Quake benutzt.

cu, ST.
===
von ???
Ich frag mich bloss was du damit sagen willst ST ? das es nicht zu gebrauchen ist oder was ?
Auser dem PAK ist kein ZIP Archiv sondern halt ein Daten Archiv bei den ZIP dateien werden die Dateien verkleiner so das die datei kleiner wird. Und bei der PAK datei werden sie einfach so wie sie sind gepackt.

Und ne PAK Archiv hat garnichts mit ZIP zu tun. ZIP gabs schon vorher als PAK.
===
von
Moin.

hm... sicher? Kann sein das ich mich irre, aber Heavy Metal FAKK (oder wies hieß) ist ja mit Quake 3 gemacht worden. Und da konnte ich eine Pack Datei mit WinZip Entpacken.

Außerdem sagte ich nicht, dass es von Nachteil wäre. Ich sagte hier nur, dass es sogar Supi ist. Aber ich glaube, dass du recht hast. Vieleicht entpackt dein packer ja nur die Quake1 Daten oder so.

Also gebrauchen kann man so was immer. Ahja. Eine Frage: Gibt es auch Routinen um eine PAK Datei zu erstellen? Dann könntest du ja sogar nen richtig Gutes Tool machen, damit man Quake1 Modden kann :)

Interessant wärs allemal.

cu, ST.
===
von ???
nein normal will ich kein tool dafür machen es soll ja nur für rein entpacken sein. Da es sowieso schon sehr gute programme gibt die PAK dateien unterstützen und meiner meinung nach auch gut gehen. Da brauche ich bestimmt kein tool dafür raus zu bringen. Hab es eigenlich gemacht um PAK Archive in sein spiel mit einzubauen mehr net



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: