#include #include global $mLumps[] global $sType Global $aFile Func WAD_Open($wadfile) $aFile = FileOpen($wadfile,16) ; Read Header Information $sType = WAD_Binary2String(FileRead($aFile,4)) FileSetPos($aFile,4,0) $lump_count = FileRead($aFile,4) FileSetPos($aFile,8,0) $dir_pos = FileRead($aFile,4) $pos = WAD_Binary2Int($dir_pos) for $i = 0 to WAD_Binary2Int($lump_count) FileSetPos($aFile,$pos,0) $lump_info = FileRead($aFile,16) $pos = $pos +16 $lump_nam = WAD_Binary2String(BinaryMid($lump_info,9,8)) $mLumps[$lump_nam] = BinaryMid($lump_info,1,8) next consolewrite( UBound($mLumps) & " Lumps fetched from file..." & @CR) EndFunc Func WAD_GetMapList() for $i in MapKeys($mLumps) $lump_len = BinaryMid($mLumps[$i],5,4) if $lump_len = 0 Then if not StringRegExp($i,"^[A-Z]*[0-9]?_",0) Then ConsoleWrite($i & @CR) EndIf EndIf next EndFunc Func WAD_Close() FileClose($aFile) EndFunc Func WAD_Type() Return $sType EndFunc Func WAD_ReadLumpData($sName) $lump_pos = BinaryMid($mLumps[$sName],1,4) $lump_len = BinaryMid($mLumps[$sName],5,4) consolewrite($sName & ": " & $lump_pos & "/" & $lump_len & @CR) FileSetPos($aFile,WAD_Binary2Int($lump_pos),0) return FileRead($aFile,WAD_Binary2Int($lump_len)) EndFunc Func WAD_ReadPicture($sName) $palette = WAD_GetPalette(WAD_ReadLumpData("PLAYPAL")) ;$colors = ReadLumpData("COLORMAP") $picture = WAD_ReadLumpData($sName) ConsoleWrite("WAD_ReadPicture: " & $sName & " - Size: " & BinaryLen($picture) & @CR) if BinaryLen($picture) = 64000 Then Return WAD_ReadPictureV2($picture,$palette) Else Return WAD_ReadPictureV1($picture,$palette) EndIf EndFunc Func WAD_ReadPictureV1($picture,$palette) $size_x = WAD_Binary2Int(BinaryMid($picture,1,2)) $size_y = WAD_Binary2Int(BinaryMid($picture,3,2)) $offset_x = WAD_Binary2Int(BinaryMid($picture,5,2)) $offset_y = WAD_Binary2Int(BinaryMid($picture,7,2)) ConsoleWrite("WAD_ReadPictureV1" & ": x("&$size_x&") y("&$size_y&")" & @CR) ;_GDIPlus_Startup() $hBitmap = _GDIPlus_BitmapCreateFromScan0 ( $size_x, $size_y,$GDIP_PXF32ARGB ) local $columnoffsets[0] for $i=0 to $size_x -1 _ArrayAdd($columnoffsets,BinaryMid($picture,(9+(4*$i)),4)) next for $i=0 to $size_x -1 $rowstart = 0 $offset = 0 $y_offset = 0 while $rowstart <> 255 $rowstart = BinaryMid($picture,WAD_Binary2Int($columnoffsets[$i]) + $offset +1,1) if $rowstart = 255 then ExitLoop endif $pixel_count= BinaryMid($picture,(WAD_Binary2Int($columnoffsets[$i]) + $offset +2),1) for $j = 0 to WAD_Binary2Int($pixel_count) -1 $pixel = BinaryMid($picture,WAD_Binary2Int($columnoffsets[$i]) + $offset + $j + 4 ,1) _GDIPlus_BitmapSetPixel ( $hBitmap, $i, $y_offset + $j, $palette[$pixel]) next $offset = $offset + WAD_Binary2Int($pixel_count) + 4 $y_offset = $y_offset + WAD_Binary2Int($pixel_count) wend next Return $hBitmap ;_GDIPlus_ImageSaveToFile ( $hBitmap, "g:\test.bmp" ) ;_GDIPlus_Shutdown() EndFunc Func WAD_ReadPictureV2($picture,$palette) $size_x = 320 $size_y = 200 ;ConsoleWrite($sName & ": x("&$size_x&") y("&$size_y&")" & @CR) ;_GDIPlus_Startup() $hBitmap = _GDIPlus_BitmapCreateFromScan0 ( $size_x, $size_y ) for $y=0 to $size_y-1 for $x=1 to $size_x $pixel = BinaryMid($picture,($x + ($y*320)) ,1) _GDIPlus_BitmapSetPixel ( $hBitmap, ($x-1),$y,$palette[$pixel]) next next _GDIPlus_ImageSaveToFile ( $hBitmap, "g:\test.bmp" ) ;_GDIPlus_Shutdown() Return $hBitmap EndFunc Func WAD_GetPalette($in) local $aReturn[0] for $i = 0 to 255 $r = BinaryMid($in,($i*3)+3,1) $g = BinaryMid($in,($i*3)+2,1) $b = BinaryMid($in,($i*3)+1,1) $rgb = $r&$g&$b _ArrayAdd($aReturn,$rgb) next Return $aReturn EndFunc Func WAD_GetColormap($in) EndFunc Func WAD_Binary2Int($in) $in = StringTrimLeft($in,2) $hex= "" while StringLen($in) > 0 $hex = $hex & StringRight($in,2) $in = StringTrimRight($in,2) WEnd return Dec($hex) EndFunc Func WAD_Binary2String($in) for $i =1 to BinaryLen($in) if BinaryMid($in,$i,1) = 0 Then ExitLoop endif next return BinaryToString(BinaryMid($in,1,$i-1)) EndFunc