Nem's Tools - HLLib

BlitzMax Forums/BlitzMax Programming/Nem's Tools - HLLib

JoshK(Posted 2007) [#1]
HLLib is a library for loading all Half-Life and Half-Life 2 package and file formats. I was interested in it for loading HL2 packages, but it requires some C classes and I stopped. I got up to the point where I could open a .gcf package file. I am putting this up here in case someone else is interested in it.

The lib can be downloaded here:
http://nemesis.thewavelength.net/index.php?p=35

file$="C:/Program Files/Steam/steamapps/base source 
engine 2.gcf"
file=RealPath(file)

Const HL_MODE_INVALID = $00
Const HL_MODE_READ = $01
Const HL_MODE_WRITE = $02
Const HL_MODE_CREATE = $04
Const HL_MODE_VOLATILE = $08
Const HL_MODE_NO_FILEMAPPING = $10
Const HL_MODE_QUICK_FILEMAPPING = $20

Const HL_VERSION=0

Const HL_PACKAGE_NONE=0
Const HL_PACKAGE_BSP=1
Const HL_PACKAGE_GCF=2
Const HL_PACKAGE_PAK=3
Const HL_PACKAGE_VBSP=4
Const HL_PACKAGE_WAD=5
Const HL_PACKAGE_XZP=6
Const HL_PACKAGE_ZIP=7
Const HL_PACKAGE_NCF=8

Const HL_ID_INVALID=$ffffffff

HLIB_HL=loadlibrarya("hllib.dll")

Global hlInitialize()
Global hlShutdown()
Global hlPackageOpenFile:Byte(file$z,uimode:Int)
Global hlPackageGetRoot:Byte Ptr()
Global hlGetInteger:Int(thing:Int)
Global hlGetPackageTypeFromName:Int(file$z)
Global hlCreatePackage:Int(PackageType:Int,uiPackage:Byte Ptr)
Global hlBindPackage:Int(package:Int)

hlInitialize=getprocaddress(HLIB_HL,"hlInitialize")
hlGetInteger=getprocaddress(HLIB_HL,"hlGetInteger")
hlPackageOpenFile=getprocaddress(HLIB_HL,"hlPackageOpenFile")
hlPackageGetRoot=getprocaddress(HLIB_HL,"hlPackageGetRoot")
hlGetPackageTypeFromName=getprocaddress(HLIB_HL,"hlGetPackageTypeFromName")
hlCreatePackage=getprocaddress(HLIB_HL,"hlCreatePackage")
hlBindPackage=getprocaddress(HLIB_HL,"hlBindPackage")
hlShutdown=getprocaddress(HLIB_HL,"hlShutdown")

hlInitialize()

Print "Version: "+hlGetInteger(HL_VERSION)
Print "File: "+file

format=hlGetPackageTypeFromName(file)
Print "Format: "+format

If Not hlCreatePackage(format,Varptr package) RuntimeError "Error creating package."
Print "Package: "+package

hlBindPackage package

If Not hlPackageOpenFile(file,HL_MODE_READ) RuntimeError "Error reading package."

If Not hlPackageGetRoot() Notify "SHIT"

hlShutdown()