Created
May 28, 2021 21:23
-
-
Save codec-abc/e6aaa77438d317fed508351eb6e38ec2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| open System | |
| open System.Collections.Generic | |
| open System.IO | |
| open SixLabors.ImageSharp | |
| open SixLabors.ImageSharp.PixelFormats | |
| let mapTut1 = @"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\data\uncompressed\app\maps\tut1" | |
| let originalDataFile = @"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\scripts\data\SCom.idp" | |
| let tut1Map = @"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\scripts\data\tut1" | |
| let outputFile = @"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\Stealth Combat\SCom.idp" | |
| let startPos = 0xD62B | |
| let startIndexTut1Map = 0x380B76F | |
| // let reverseBytes(bytes: byte [], startPos: int, length: int, reverse: bool): byte[] = | |
| // let mutable subSequence = List<byte>() | |
| // for i in 0..length - 1 do | |
| // // Console.WriteLine ("Hex: {0:X}", bytes.[startPos + i]) | |
| // subSequence.Add(bytes.[startPos + i]) | |
| // let inOrderArray = Array.ofSeq subSequence | |
| // if reverse then | |
| // Array.rev inOrderArray | |
| // else | |
| // inOrderArray | |
| // [<EntryPoint>] | |
| // let main argv = | |
| // let bytes = File.ReadAllBytes(mapTut1) | |
| // for i in 0..(3*4) do | |
| // let subArray = reverseBytes(bytes, startPos + (i * 4), 4, true) | |
| // let number = BitConverter.ToInt32(subArray, 0) | |
| // Console.WriteLine ("Hex: {0:X}", number) | |
| // let number = BitConverter.ToSingle(subArray, 0) | |
| // printfn "number is %f" number | |
| // printfn "Done" | |
| // 0 | |
| //[<EntryPoint>] | |
| //let main argv = | |
| // let tut1MapBytes = File.ReadAllBytes(tut1Map) | |
| // let dataFileBytes = File.ReadAllBytes(originalDataFile) | |
| // let mutable offset = 0 | |
| // for b in tut1MapBytes do | |
| // dataFileBytes.[startIndexTut1Map + offset] <- tut1MapBytes.[offset] | |
| // offset <- offset + 1 | |
| // File.WriteAllBytes(outputFile, dataFileBytes) | |
| // 0 | |
| //[<EntryPoint>] | |
| //let main argv = | |
| // let binMapPath = @"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\scripts\data\map.bin" | |
| // let binMapBytes = File.ReadAllBytes(binMapPath) | |
| // let reader = new BinaryReader(new MemoryStream(binMapBytes)) | |
| // let image = Image<L16>(640, 640) | |
| // let lines = List<String>() | |
| // lines.Add("o heightmap") | |
| // lines.Add(" ") | |
| // //let pixmap = Array.create 640 (Array.create 640 (int16 0)) | |
| // let pixmap = Array2D.init 640 640 (fun a b -> (int16) 0) | |
| // for t in 0..39 do | |
| // for x in 0..639 do | |
| // for y in 0..15 do | |
| // let height = reader.ReadInt16() // height as a 16 bit integer | |
| // let flags = reader.ReadInt16() // FF 8F | |
| // let flags1 = reader.ReadInt16() // unknown | |
| // let flags2 = reader.ReadInt16() // unknown | |
| // let xf = (float) x | |
| // let yf = (float) y + (16.0 * (float) t) | |
| // let mutable heightf = (float) height | |
| // let scaleFactor = 1.0 / 300.0 | |
| // heightf <- heightf * scaleFactor | |
| // let line = sprintf "v %f %f %f" xf yf heightf | |
| // pixmap.[(int) xf, (int) yf] <- height | |
| // lines.Add(line) | |
| // () | |
| // reader.Dispose() | |
| // let objOutputPath = @"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\scripts\data\heightmap.obj" | |
| // File.WriteAllLines(objOutputPath, lines) | |
| // for y in 0..639 do | |
| // let pixelRowSpan = image.GetPixelRowSpan(y) | |
| // for x in 0..639 do | |
| // pixelRowSpan.[x] <- L16((uint16) pixmap.[x, y]) | |
| // let pngPath = @"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\scripts\data\heightmap.png" | |
| // let encoder = Formats.Png.PngEncoder() | |
| // encoder.BitDepth <- Formats.Png.PngBitDepth.Bit16 | |
| // image.SaveAsPng(pngPath, encoder) | |
| // printfn "%s" "done" | |
| // Console.ReadLine() | |
| // 0 | |
| let rgb565ToRGB2 hexValue = | |
| let r = (hexValue &&& 0xF800) >>> 8 // rrrrr... ........ -> rrrrr000 | |
| let g = (hexValue &&& 0x07E0) >>> 3 // .....ggg ggg..... -> gggggg00 | |
| let b = (hexValue &&& 0x1F) <<< 3 | |
| (byte r, byte g, byte b) | |
| let rgb565ToRGB1 hexValue = | |
| let r = (hexValue &&& 0xF800) >>> 11 | |
| let g = (hexValue &&& 0x07E0) >>> 5 | |
| let b = hexValue &&& 0x001F | |
| let r = (r * 255) / 31 | |
| let g = (g * 255) / 63 | |
| let b = (b * 255) / 31 | |
| (byte r, byte g, byte b) | |
| [<EntryPoint>] | |
| let main argv = | |
| let tut1MapBytes = File.ReadAllBytes(@"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\scripts\data\tut4map.texture") | |
| let nbBytes = tut1MapBytes.Length | |
| let nbPixels = nbBytes / 4 | |
| let sizeX = 128 | |
| let sizeY = 128 | |
| let backgroundColor = Rgba32(byte 0, byte 255, byte 255, byte 255) | |
| let mutable counter = 0 | |
| let tileX = 3 | |
| let tileY = 44 | |
| let image = new Image<Rgba32>(tileX * sizeX + 500, tileY * sizeY + 500, backgroundColor) | |
| let readPalette = fun () -> | |
| let palette = List<Rgba32>() | |
| for index in 0..(256 + 8 - 1) do | |
| if index = 1 then | |
| let letter = tut1MapBytes.[counter] | |
| let letterString = System.Text.Encoding.ASCII.GetString([|letter|]) | |
| printfn "%s" letterString | |
| let r = tut1MapBytes.[counter] | |
| counter <- counter + 1 | |
| let g = tut1MapBytes.[counter] | |
| counter <- counter + 1 | |
| let b = tut1MapBytes.[counter] | |
| counter <- counter + 1 | |
| let a = tut1MapBytes.[counter] | |
| counter <- counter + 1 | |
| let pixel = Rgba32(r, g, b, (byte) 255 - a) | |
| palette.Add(pixel) | |
| palette | |
| let readChunk = fun (tileIndexX, tileIndexY) -> | |
| let currentTile = new Image<Rgba32>(sizeX, sizeY, backgroundColor) | |
| let palette = readPalette() | |
| for y in 0..(sizeY - 1) do | |
| for x in 0..(sizeX - 1) do | |
| let index = tut1MapBytes.[counter] | |
| let pixel = palette.[(int) index + 8] | |
| let margin = 0 | |
| let xIndex = x + tileIndexX * (sizeX + margin) | |
| let yIndex = y + (tileIndexY * (sizeY + margin)) | |
| image.[xIndex, yIndex] <- pixel | |
| currentTile.[x, y] <- pixel | |
| counter <- counter + 1 | |
| let imagePalette = new Image<Rgba32>(17, 17) | |
| let path = sprintf "%s-%i-%i.png" @"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\scripts\data\textures\palette-(yx)-" tileIndexY tileIndexX | |
| let mutable paletteCurrentIndex = 0 | |
| for pixel in palette do | |
| let paletteIndexX = paletteCurrentIndex % 17 | |
| let paletteIndexY = paletteCurrentIndex / 17 | |
| imagePalette.[paletteIndexX, paletteIndexY] <- pixel | |
| paletteCurrentIndex <- paletteCurrentIndex + 1 | |
| imagePalette.SaveAsPng(path) | |
| let path = sprintf "%s-%i-%i.png" @"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\scripts\data\textures\tile-(yx)-" tileIndexY tileIndexX | |
| currentTile.SaveAsPng(path) | |
| for tileIndexY in 0..(tileY - 1) do | |
| for tileIndexX in 0..(tileX - 1) do | |
| readChunk(tileIndexX, tileIndexY) | |
| readChunk(0, tileY) | |
| let nbBytesLeft = nbBytes - counter | |
| let nbPixelLeft = nbBytesLeft / 4 | |
| let nbPixelsByChunk = sizeX * sizeY | |
| image.SaveAsPng(@"C:\Users\codec\Desktop\Stealth_Combat_Tools-master\scripts\data\tut4map.png") | |
| 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment