DIV (Game Maker 2000) FPG und MAP Ausleser
Übersicht

![]() |
Suco-XBetreff: DIV (Game Maker 2000) FPG und MAP Ausleser |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Der Game Maker 2000, auch bekannt unter DIV, war früher eine der besten BASIC ähnlichen Sprachen für DOS. Da es dafür recht hübsche Grafiken gibt, wünschen sich viele schon seit Ewigkeiten einen Konverter, der ihnen die Grafiken aus FPG und MAP Dateien ausliest und in ein moderneres Format speichert. Gesagt, getan. Danke an D20 für das Einscannen der Formatdaten, hier die Lib. Code: [AUSKLAPPEN] Strict Rem DIV (Game Maker 2000) Fpg und Map reader by Suco-X End Rem Type TDivPaletteHeader Field HeaderName:String Field Unknown:Int Field Version:Byte End Type Type TDivPalette Field R:Byte[256] Field G:Byte[256] Field B:Byte[256] End Type Type TFpgPack Field Files:TList = New TList Method AddFile(File:TFPGFIle) Files.AddLast(File) End Method Method Mask(R:Byte, G:Byte, B:Byte) For Local File:TFpgFile = EachIn Files File.Mask(R, G, B) Next End Method End Type Type TDivFile Field Pixmap:TPixmap Field Width:Int Field Height:Int Field Beschreibung:String Method Mask(R:Byte, G:Byte, B:Byte) Pixmap = MaskPixmap(Pixmap, R, G, B) End Method End Type Type TFpgFile Extends TDivFile Field Dateiname:String End Type Type TMapFile Extends TDivFile End Type Type TDiv Function ReadFPG:TFpgPack(Filename:String) Local Stream:TStream = Null Local HeaderName:String = "" Local Unknown:Int = 0 Local Version:Int = 0 Local Palette:TDivPalette = Null Local FpgPack:TFpgPack = Null Stream = ReadFile(Filename) If Not Stream Return Null EndIf HeaderName = Stream.ReadString(3) If HeaderName<>"fpg" Return Null EndIf Unknown = Stream.ReadInt() Version = Stream.ReadByte() SeekStream(Stream, 8) Palette = ReadPalette(Stream) SeekStream(Stream, 1352) FpgPack = New TFpgPack While Not Stream.EOF() Local GrafikCode:Int = Stream.ReadInt() Local RegisterSize:Int = Stream.ReadInt() Local Beschreibung:String = Stream.ReadString(32).Trim() Local Dateiname:String = Stream.ReadString(12).Trim() Local Width:Int = Stream.ReadInt() Local Height:Int = Stream.ReadInt() Local PointCount:Int = Stream.ReadInt() Local Pixmap:TPixmap = Null For Local i:Int = 0 Until Dateiname.Length If Dateiname[i] = 0 Dateiname = Dateiname[..i].Trim() EndIf Next For Local i:Int = 0 Until Beschreibung.length If Beschreibung[i] = 0 Beschreibung = Beschreibung[..i].Trim() EndIf Next For Local i:Int = 0 Until PointCount Stream.ReadShort() Stream.ReadShort() Next Pixmap = CreatePixmap(Width, Height, PF_RGB888) For Local Y:Int = 0 Until Height For Local X:Int = 0 Until Width Local Index:Byte Local Data:Byte Ptr index = Stream.ReadByte() Data = Pixmap.PixelPtr(X,Y) Data[0] = Palette.R[Index] Data[1] = Palette.G[Index] Data[2] = Palette.B[Index] Next Next If Pixmap Local FpgFile:TFpgFile = New TFpgFile FpgFile.Pixmap = Pixmap FpgFile.Width = Width FpgFile.Height = Height FpgFile.Beschreibung = Beschreibung FpgFile.Dateiname = Dateiname FpgPack.AddFile(FpgFile) EndIf Wend Stream.Close() Return FpgPack End Function Function ReadMap:TMapFile(Filename:String) Local Stream:TStream = Null Local HeaderName:String = "" Local Unklar:Int = 0 Local Version:Byte = 0 Local Width:Int = 0 Local Height:Int = 0 Local Grafikcode:Int = 0 Local Beschreibung:String = "" Local PointCount:Int = 0 Local Palette:TDivPalette = Null Local Pixmap:TPixmap = Null Local MapFile:TMapFile = Null Stream = ReadFile(Filename) If Not Stream Return Null EndIf HeaderName = Stream.ReadString(3) If HeaderName<>"map" Return Null EndIf Unklar = Stream.ReadInt() Version = Stream.ReadByte() Width = Stream.ReadShort() Height = Stream.ReadShort() Grafikcode = Stream.ReadInt() Beschreibung = Stream.ReadString(32) Beschreibung = Beschreibung.Trim() For Local i:Int = 0 Until Beschreibung.length If Beschreibung[i] = 0 Beschreibung = Beschreibung[..i].Trim() EndIf Next SeekStream(Stream, 48) Palette = ReadPalette(Stream) SeekStream(Stream, 1392) PointCount = Stream.ReadShort() SeekStream(Stream, 1394+(4*PointCount)) Pixmap = CreatePixmap(Width, Height, PF_RGB888) For Local Y:Int = 0 Until Height For Local X:Int = 0 Until Width Local Index:Byte Local Data:Byte Ptr index = Stream.ReadByte() Data = Pixmap.PixelPtr(X,Y) Data[0] = Palette.R[Index] Data[1] = Palette.G[Index] Data[2] = Palette.B[Index] Next Next If Pixmap MapFile = New TMapFile MapFile.Width = Width MapFile.Height = Height MapFile.Beschreibung = Beschreibung MapFile.Pixmap = Pixmap EndIf Stream.Close() Return MapFile End Function Function ReadPalette:TDivPalette(Stream:TStream) Local Palette:TDivPalette Local Mul:Int Palette = New TDivPalette Mul = (256/63) For Local i:Int = 0 Until 256 Palette.R[i] = Stream.ReadByte()*Mul Palette.G[i] = Stream.ReadByte()*Mul Palette.B[i] = Stream.ReadByte()*Mul Next Return Palette End Function Function ReadPaletteHeader:TDivPaletteHeader(Stream:TStream) Local Header:TDivPaletteHeader Header = New TDivPaletteHeader Header.HeaderName = Stream.ReadString(3) Header.Unknown = Stream.ReadInt() Header.Version = Stream.ReadByte() Return Header End Function End Type 'Beispiel für dass auslesen und speichern einer DIV Fpg Datei Rem Local Pack1:TFpgPack = TDiv.ReadFPG("WOMAN.FPG") If Not Pack1 End EndIf Pack1.Mask(0,0,0) For Local File:TFpgFile = EachIn Pack1.Files SavePixmapPNG(File.Pixmap,"grafiken/"+File.Beschreibung+".png") Next End Rem 'Beispiel für dass auslesen und speichern einer DIV Map Datei Rem Local Map1:TMapFile = TDiv.ReadMap("MENU.MAP") SavePixmapPNG(Map1.Pixmap, "MENU.png") End Rem Alternativ noch eine Zip Datei mit Code und Beispielen. Kann aber nicht für die ewige Existenz des Links bürgen. http://www.eastwestgames.de/file.php?id=150 Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
NBGamesBetreff: Wie meinst du das mit dem Stream ? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab Netzwerk aufgebaut E0F kam (ist ja klar dabei heraus) doch mit der Datei ist die Information verloren gegangen und es bricht ab...
Ich mach zurzeit ein genial tolles Groß projekt... ![]() Ps NBGames |
||
Ps: Niko - NBGames° - www.nbgames.de.gg |
![]() |
Suco-X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Sicher das du hier richtig bist? Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group