#######################################################################
#####################  GetmanSoft presents ############################
#######################################################################

                     SpriteEnginePro V2.20

			<< FREEWARE >>

		    Autor: Jrg Getschurek


	INHALT:     1. Kurzbersicht

		    2. Systemanforderungen

		    3. Anleitung

		    4. Kommandozeilenparameter

                    5. Dateiformat

		    6. Beigefgte Dateien
		       a. Programm
		       b. Demo 1 (Weltraumanimation)
		       c. Demo 2 (Slide-Show)
                       d. GameLibrary ( BC++3.1) fr VGA-Mode 13H

		    7. Tips

		    8. Probleme beim Laden von Windowsbitmaps

		    9. Aufbau einer Farbpalette

		    10. Allgemeines zur Spieleprogrammierung

		    11. ltere Versionen der SpriteEnginePro

		    12. Sonstiges


                       Anhang: Liste der beigefgten C++Funktionen

------------------------------------------------------------------------

1. Kurzbersicht:

    - Es knnen bis zu 4000!! Windows-Bitmaps in einer Grafikresource
      gespeichert werden.
    - Sortierung nach Bildnamen (Optional).
    - Da jedes Bild ber seinen Bitmap-Namen (ohne Erweiterung .BMP) an-
      gesprochen wird, braucht die Sprungadresse beim Erneuten generieren
      der Resource nicht identisch zu sein. (vgl. DoomWad-Files)
    - Untersttzung von Super-VGA mit 8 Bit Farbtiefe [HiRes]:
      Die Grafikanzeige pat sich automatisch der Dimensionierung des
      Bildes an. Z.B. bei einer Bildgre von X=700 und Y=500,
      wird die Auflsung 800*600 gewhlt.
      Folg. Auflsungen werden untersttzt:
	Standard-VGA  320*200 256 Farben
        Super-VGA     640*480 256 Farben
        Super-VGA     800*600 256 Farben
        Super-VGA    1024*768 256 Farben
    - Mehrfachoperationen durch Bildmarkierung
      ( Gilt fr : Export, Drucken und Paletten-Nr. ndern).
    - Export ins Windows-Bitmapformat.
    - Die Kopfdaten der Resource knnen komplett ausgedruckt werden.
      (fr 4000 Bilder sind ca. 60 DIN-A4 Seiten ntig!)
    - Suchfunktion ber Bildname.
    - Optionale Erstellung einer Log-Datei in der Informationen ber
      nicht eingelesene Bitmaps enthalten ist (z.B. falsche Farbtiefe).
    - Automatische Generierung einer C-Headerdatei mit den Spritenamen.
    - Direkt zum Einstieg in die Spieleprogrammierung ist eine Klassen-
      bibliothek fr Borland C++ 3.1 beigefgt.
      Da keine C++Spezifischen Merkmale, wie Vererbung usw. verwendet wird,
      knnen die Funktionen auch leicht nach C portiert werden.

    - Und wo ist das Malprogramm ?
      Als Spiele-Entwickler sollte man auf Professionelle Programmpakete, wie
      Corel Draw/PhotoPaint zurckgreifen, da diese Programme einen Wust an
      Grafikfunktionen/Tricks zur Verfgung stellen die jede Eigen-
      entwicklung im Keime ersticken lt.
      Zum Konvertieren benutze ich brigens PaintShopPro 3.11 :
      Schnell und Preiswert!
      Und nicht vergessen eine Globale Farbpalette zu definieren!

    - Fr die Nchsten Versionen ist geplant:
         - Direktes bearbeiten von Paletten
	 - Bilder im Grafikmodus vor-und zurckblttern
         - Integriertes Malprogramm
         - Name der C-Headerdatei identisch mit dem Namen der Resource
           (Z.B. Resource: DEMO.SEP / C-Header: DEMO.H)

	   Sonst noch Vorschlge? Kontakt siehe Punkt 12.

2. Systemanforderungen:

   Prozessor   : 386>>
   RAM         : ca. 220 KByte
   Grafik      : VGA / Super-VGA (VESA)
   Maus        : MS-Kompatibel

   Dieses Programm luft auch im DOS-Fenster unter Windows 95.
   Im Dos-Modus, oder mit lteren DOS-Versionen unbedingt ein
   Software-Cache (z.B. SMARTDRIVE) benutzen.

   Programmiersprache : Beliebig (C++ Library beigefgt)


3. Anleitung

   Mit 'F2 - Neu' werden alle Bitmap-Dateien aus dem aktuellen Verzeichnis in
   eine Resourcen-Datei geschrieben. Die Bitmaps mssen dem vorgeschriebenen
   Format entsprechen:
   Bildbreite <=1024 Pixel
   Bildhhe   <= 768 Pixel
   Farbtiefe 8 Bit (256 Farben)
   Unkomprimiert (RGB encoded)

   Die Datei-Erweiterung fr die Resource kann frei gewhlt werden.
   (Empfehlung: *.SEP um die Verknpfung mit dem Programm zu verdeutlichen)
   Wenn eine Bitmapdatei gendert wird, mu die Resource mit dieser Funktion
   neu erstellt werden. Hierbei ist es belanglos, dass die Offset-Adressen
   der Bilder gendert werden, da ein Bild ber dessen Name (vgl. SEPRO.H)
   angesprochen wird.

   Mit 'F3 - Laden' wird eine bereits erstellte Resource geladen.

   Mit 'F4 - Suchen' wird ein bis zu achtstellig einzugebener Name mit allen
   Namen der Resource verglichen. Wenn eine bereinstimmung erfolgt, wird das
   gefundene Bild fokussiert.

   Mit 'F5 - Palette' wird im ersten Schritt die Paletten-Nr. des
   fokussierten und aller markierten Bilder gendert (mgl. Werte: 0-9).
   Im zweiten Schritt kann die Farbpalette aus der fokussierten originalen
   Bitmap-Datei in die Resource bernommen werden.
   Damit werden alle Bilder mit der gleichen Paletten-Nr. mit dieser
   Farbpalette angezeigt.
       -> Gilt auch fr Markierte Bilder!

   Mit 'F6 - Drucken' werden durch Eingabe von 'B' die Infos des fokussierten
   Bildes ausgedruckt. Durch Eingabe von 'R' werden alle relevanten
   Informationen der Resource gedruckt
   (fr 4000 Bilder sind ca.60 DINA4-Seiten ntig!).
       -> Gilt auch fr Markierte Bilder!

   Mit 'F7 - Export' wird das fokussierte Bild als einzelne Bitmap-Datei ge-
   speichert. Eine eventuell bereits vorhandene Datei wird berschrieben.
       -> Gilt auch fr Markierte Bilder!

   Mit 'F8 - C-Header' wird eine C-Konforme Headerdatei (SEPRO.H) mit dem
   Datentyp, der Deklaration und eine numerische Aufzhlung der
   Sprites erstellt.

   Mit 'RETURN - Anzeigen' wird das fokussierte Bild im Grafikmodus angezeigt.
   Die Auswahl des Grafikmodus pat sich automatisch der Dimensionierung des
   anzuzeigenden Bildes an.

   Mit '[X] Log-Datei' werden Bitmap-Dateien, die nicht gelesen werden konnten,
   in eine Log-Datei mit den entsprechenden Fehlern gelistet (SEPRO.LOG).

   Mit '[X] HiRes' werden Super-VGA-Bilder bis zu einer Gre von
   X=1024 und Y=768 eingelesen und angezeigt.
   Mit '[ ] HiRes' werden nur Bilder fr VGA-Mode 320*200 eingelesen.

   Mit '[X] Sort.-Name' werden die eingelesenen Bilder ber deren Namen
   sortiert.


4. Kommandozeilenparameter

       Optional kann eine Grafik-Resource geladen werden.
       SEPRO.EXE [Datei.xxx]


5. Dateiformat

  
     ######################### Globaler Header ##############################
      Bytes  Typ           Offset    Beschreibung
     ------------------------------------------------------------------------
  
         19  String             0    Dateikennung "SpriteEnginePro210"
  
          1  BYTE              19    Fr Standard-VGA 320*200 = 0
				     Fr Super-VGA bis 1024*768 = 1

	  2  WORD              20    Anzahl Bilder in der Resource

     64.000  Struktur          22    Globaler Bildheader
     (    2  WORD                    Lfd. Nr. des Bildes                   )
     (   10  String                  Bildname (Dateiname als Windows-BMP)  )
     (                               Ohne Datei-Erweiterung BMP!           )
     (    4  DWORD                   Absolute Sprungadresse zum Bild       )
     (   Summe=16 Bytes multipliziert mit 4.000 Bilder = 64.000 Bytes      )

      7.680  Byte-Folge              10 Rot,Grn,Blau-Farbpaletten
     (  768  Byte-Folge    64.022    1. Farbpalette                        )
     (  768  Byte-Folge    64.790    2. Farbpalette                        )
     (  768  Byte-Folge    65.558    3. Farbpalette                        )
     (  768  Byte-Folge    66.326    4. Farbpalette                        )
     (  768  Byte-Folge    67.094    5. Farbpalette                        )
     (  768  Byte-Folge    67.862    6. Farbpalette                        )
     (  768  Byte-Folge    68.630    7. Farbpalette                        )
     (  768  Byte-Folge    69.398    8. Farbpalette                        )
     (  768  Byte-Folge    70.166    9. Farbpalette                        )
     (  768  Byte-Folge    70.934    10. Farbpalette                       )

     ############################## Bilder ##################################
      Bytes   Typ          Offset    Beschreibung
     ------------------------------------------------------------------------

	 26  Struktur      71.702    Bildheader
     (   10  String                  Bildname / Dateiname als Windows-BMP  )
     (                               Ohne Datei-Erweiterung BMP!           )
     (    2  WORD                    Paletten-Nr.                          )
   -(    4  DWORD                   Anzahl der Bildpixel                  )
    (    2  WORD                    Bildbreite                            )
    (    2  WORD                    Bildhhe                              )
    (    2  WORD                    Horizontale Bildmitte                 )
    (    2  WORD                    Vertikale Bildmitte                   )
    (    2  WORD                    Fllbytes fr den Bitmapexport        )
   
   -------> Byte-Folge    71.728    Farbwerte des Bildes


	 26  Struktur  Sprungadresse Bildheader
     (   10  String                  Bildname / Dateiname als Windows-BMP  )
     (                               Ohne Datei-Erweiterung BMP!           )
     (    2  WORD                    Paletten-Nr.                          )
   -(    4  DWORD                   Anzahl der Bildpixel                  )
    (    2  WORD                    Bildbreite                            )
    (    2  WORD                    Bildhhe                              )
    (    2  WORD                    Horizontale Bildmitte                 )
    (    2  WORD                    Vertikale Bildmitte                   )
    (    2  WORD                    Fllbytes fr den Bitmapexport        )
   
   --> Byte-Folge  Sprungadresse+26  Farbwerte des Bildes


				 usw.


6. Beigefgte Dateien

 a. Programm

	  1. SEPRO.EXE    : SpriteEnginePro Vx.xx
	  2. SEPRO.TXT    : Dieses Dokument

 b. Demo 1 (Weltraumanimation)

	  1. DEMO1.EXE    : Das Erste Demoprogramm
	  2. DEMO1.CPP    : Der Quellcode
	  3. DEMO1.H      : Der Header mit den Spritenamen (ex. SEPRO.H)
	  4. DEMO1.SEP    : Die Grafik-Resource

 c. Demo 2 (Slide-Show)

	  1. DEMO2.EXE    : Das Zweite Demoprogramm
	  2. DEMO2.CPP    : Der Quellcode
	  3. DEMO2.H      : Der Header mit den Spritenamen (ex. SEPRO.H)
	  4. DEMO2.SEP    : Die Grafik-Resource


 d. GameLibrary (BC++ 3.1) fr Standard-VGA 320*200 256 Farben

    Alle CCP Dateien mssen in einem Projekt zusammengefat werden!
    In den Header-Dateien steht die Klassendefinition und in den
    dazugehrigen CPP-Dateien die Elementfunktionen.
    Wenn die Include-Dateien in das gleiche Verzeichnis der CPP-Dateien
    kopiert werden, muss die Einbindung mit #include "xxxx.h" erfolgen.

	  1. PAGE.H       : Bildschirmseiten
	     PAGE.CPP
	  2. BMP.H        : Verwalten von Sprites und Farbpaletten
	     BMP.CPP
	  3. DRAW.H       : Zeichnen von Linien usw.
	     DRAW.CPP
	  4. MOUSE.H      : Mausfunktionen
	     MOUSE.CPP
	  5. DEFIN.H      : Datentypen und Konstanten
	  6. PGEXTERN.H   : Externe definition der Seiten



7. Tips

    Vorschlge bei der Vergabe von BMP-Dateinamen:

	 S_xxxxxx - Bewegliche Sprites (Monster, Raumschiffe etc.)
	 F_xxxxxx - Einzelner Font-Buchstabe
	 T_xxxxxx - Text
	 B_xxxxxx - Ein Hintergrundbild
	 X_xxxxxx - Texture

    Folgende Schritte mssen durchgefhrt werden, um eine Animation
    durchzufhren :

	 1. Bildschirmseite SWAP lschen mit PAGE.Fill(..),
	    oder PAGE.PicToSwap(). Mit PAGE.PicToSwap() knnte auch
	    ein Hintergrundbild in die Seite SWAP kopiert werden.

	 2. Die Sprites werden dann mit BITMAP.Put(..), oder BITMAP.Zoom(..)
	    in die Seite SWAP kopiert. Je nachdem in welcher reihenfolge
	    die Sprites kopiert werden, wird bestimmt, ob ein Sprite
	    im Vorder-, oder Hintergrund erscheint.
	    Die Sprites mssen vorher mit BITMAP.LoadSprite(..) in
	    den Speicher geladen werden.

	 3. Die Seite SWAP wird mit PAGE.ToVram(..) ins VideoRAM kopiert.

	 Somit ist ein Refresh-Zyklus beendet und es wird mit Punkt 1.
	 fortgefahren.


8. Probleme beim Laden von Windowsbitmaps

    Wenn ein Windowsbitmap nicht geladen, bzw. falsch angezeigt wird, sollte
    diese Datei mit einem Bildbetrachter, wie PaintShopPro, oder
    GraphicsWorkshop, 'nachgearbeitet' werden.
    Das heit, die Dimensionierung an die eigentliche Bildgre
    anpassen und das Bitmap als Windowsbitmap RGB-Encoded
    mit 8 BIT Farbtiefe abspeichern. (Keine RLE-Codierung)



9. Aufbau einer Farbpalette

	  Eine Palette = 768 Byte
	  pro farbe: 3 Byte, xx Farbwerte von 0-63
		      Rot Grn Blau
	  Farbe0   =  xx   xx   xx
	  Farbe1   =  xx   xx   xx
	  [...]
	  Farbe255 =  xx   xx   xx


10. Allgemeines zur Spieleprogrammierung

    Damit ein (Shareware)-Spiel auch eine gewisse Verbreitung erlangt, sollte
    darauf geachtet werden, dass die Grafiken leicht zu patchen sind.
    Bei der Konzeption der SpriteEnginePro (und der GameLib) wurde darauf
    geachtet, dass dies mglich ist.
    Da die Sprites intern nur ber deren BMP-Namen (o. Extension) angesprochen
    werden (s. SEPRO.H / BMP.CPP), kann bei der Weitergabe dieses Programms
    zusammen mit dem Spiel jeder die Grafiken leicht ndern.
    Folgende Schritte mssen vom Spieler durchgefhrt werden, um ein Spiel
    zu patchen:

             a. SEPRO.EXE starten.
             b. Grafik-Resource laden.
	     c. "Alle" Bilder als BMP exportieren!!!
             d. Die BMP-Dateien mit einem beliebigen Malprogramm ndern
                ( Auf die Farbpalette und die RGB-Codierung achten!!).
             e. Eine Neue Grafikresource mit den BMP-Dateien im aktuellen
                Verzeichnis erstellen.

             Unter folg. Bedingungen:
             - Die Bitmap-Namen drfen nicht gendert werden
             - Es darf beim Einlesen der Bitmaps keine Datei fehlen
             - Der Name der Grafikresource darf nicht gendert werden
               ( natrlich kann per Kommandozeile eine zus. Grafikresource
                 geladen werden s. Doom -file...)
             - Die Bitmaps muessen sortiert nach Namen eingelesen werden


11. ltere Versionen der SpriteEnginePro

    Mit den Versionen <=1.3 mssen die Bilder ins BMP-Format konvertiert
    werden:

	  a. Bild laden
          b. Bild markieren (kopieren)
          c. Bitmapformat whlen [B]
          d. Bild einfgen
          e. Bild als BMP speichern

     Danach kann man mit einem Grafikbetrachter unter Windows die einzelnen
     Bilder aus der Resource kopieren und einzeln als BMP-Datei abspeichern.


12. Sonstiges

    Es darf nur das Originalarchiv ( SEPRO220.ZIP ) weitergegeben werden.
    Der beigefgte Quellcode darf kpl., oder in Auszgen verwendet werden.

    Das Cockpit aus Demo1 ist ein gepatchtes TIE-Defender-Cockpit.
    Die Monster aus Demo2 sind aus dem Alien-Patch fr Doom.

    Die GameLib wird zusammen mit der SpriteEngine permanent aktualisiert.


    Mailbox       Netz      Point-Adresse
    ------------  --------  ------------------------------
    SOLO          FidoNet   Joerg Getschurek 2:2410/229.23
                                 (demnchst 2:2410/1001.23)

    SpriteEnginePro und GameSpeed sind erhltlich bei obiger BBS oder bei:
    Diverse       GamesNet


    Falls Probleme oder Fragen mit SpriteEnginePro auftauchen sollten:
    Mitteilung an mich an die o.g. Fido-Adresse.

      oder direkt beim Autor:
	      Jrg Getschurek
	      Hausotterstr.22b
	      13409 Berlin
	      Tel.: 030/496 68 04  (Voice/Data/Fax)


    GATANTIEVEREINBARUNG:
    PROGRAMM, ANLEITUNG, UND QUELLCODE WERDEN IHNEN BERLASSEN "WIE BESEHEN",
    DAS HEISST, DER AUTOR BERNIMMT KEINE HAFTUNG FR DIE EIGNUNG DES PROGRAMMS,
    DER ANLEITUNG, ODER DES QUELLCODES ZU IRGENDEINEM BESONDEREN ZWECK.
    INSBESONDERE HAFTET ER NICHT FR SCHDEN, ODER FOLGESCHDEN, DIR DIREKT,
    INDIREKT, ABSICHTLICH, ODER UNABSICHTLICH DURCH DEN EINSATZ DES PROGRAMMS,
    DER ANLEITUNG, ODER DES QUELLCODES ENTSTEHEN.
     

    Berlin, den 21.12.1995

--------------------------------------------------------------------------

Anhang: Liste der beigefgten C++Funktionen
	Die Elementfunktionen lassen sich auch leicht in normale
	C-Funktionen konvertieren, da keine ++Techniken, wie Vererbung,
	Polymorphie usw., benutzt werden.

Wenn eine neue Resource erstellt wird, mu mit der Taste F8 eine
Header-Datei mit den Spritenamen erstellt werden!!
Unter diesem Namen (Typ WORD) wird das Sprite innerhalb des Quellcodes
identifiziert.

Spritetyp:   (DEFIN.H)
============

 struct SPRITE {
                 DWORD offset;   //Absolute Sprungadresse zum Spriteheader
                                 //der Resourcen-Datei
                 int x;          //Bildbreite
		 int y;          //Bildhhe
                 BYTE far *color;//Far-Pointer auf das Sprite
	       };

 Ein Hintergrundbild sollte nicht als Sprite definiert werden, sondern
 mit LoadSpriteToPage(...) direkt in die 2. Seite geschrieben werden.


Konstanten:    (DEFIN.H)
===========
      GAME=0x13; //Spielemodus 320*200  256 Farben
      TEXT=0x03; //Textmodus 80*25

      Argumente fr 'page'
      SWAP=0;    //In dieser Seite wird immer das aktuelle Bild aufgebaut
      PIC=1;     //Seite, um ein Hintergrundbild zu speichern
      VRAM=2;    //Direkt ins VideoRAM schreiben


Dateien:
========

PAGE.H/CPP Bildschirmseiten      Klasse : PAGE
      void InitVGA(BYTE modus);
	   VGA-Modus ber BIOS-Funktion initialisieren.

      void Screen(BYTE status);
	   Bildschirmausgabe ber BIOS-Funktion aus-/einschalten.

      void Fill(BYTE page,BYTE color);
	   Bildschirmseite mit einer Farbe fllen.
	   Mit Farbe=0 kann der Bildschirm gelscht werden.

      void ToVram(BYTE page);
	   Bildschirmseite ins VideoRAM kopieren.

      void PicToSwap(void);
	   Hintergrundbild in die Bildschirmseite(SWAP) kopieren


BMP.H/CPP Verwalten von Sprites     Klasse : BITMAP

      WORD InitResource(char filename[],SPRITE bmp[])
           Offset-Adressen und breite/hhe der Sprites
	   einlesen.

      void CloseResource(void)
	   Resource-Datei schlieen.

      BOOL LoadSprite(WORD name,SPRITE bmp[])
	   Speicher fr ein Sprite reservieren und das Sprite
	   laden.

      BOOL LoadSpriteToPage(WORD name,SPRITE bmp[],BYTE page)
	   Sprite direkt in eine Bildschirmseite schreiben.
	   ( Fr Hintergrundbilder!)

      void Free(WORD name,SPRITE bmp[])
	   Reservierten Speicher fr ein Sprite wieder freigeben.

      BOOL Put(WORD name,SPRITE bmp[],int x,int y,BYTE page,BOOL FAST)
	   Sprite an XY-Koordinate(Mittelpunkt) in eine
	   Bildschirmseite schreiben.
	   (Fr groe feststehende Objekte FAST=TRUE )

      BOOL Zoom(WORD name,SPRITE bmp[],int x,int y,BYTE zoom,BYTE page)
	   Sprite an XY-Koordinate(Mittelpunkt) in eine
	   Bildschirmseite schreiben.
	   Wird zum Beispiel dem Argument 'zoom' der Wert 2 bergeben, wird
	   jedes Pixel des Sprites auf 3x3 Pixel vergrert.
	   Das Zoomen erfolgt proportional in alle Richtungen
	   zum Mittelpunkt des Sprites.

      WORD Offset(int x,int y)
	   Adresse von xy berechnen.
	   320*y+x

      void InitPalette(WORD palnr)
	   Eine der zehn Farbpaletten (0-9) aus der Grafik-Resource
	   initialisieren.

      BOOL SetRGB(int color,BYTE red,BYTE green,BYTE blue)
	   Eine Farbe der aktuellen Palette ndern.
           (ungetestet, da noch ber VGA-BIOS-Interrupt)
                           ^^^^

DRAW.H/CPP  Zeichnen von Linien usw.  Klasse : DRAW

      void SetPix(int x,int y,BYTE color,BYTE page);
	   Ein Pixel zeichnen.

      BYTE GetPix(int x,int y,BYTE page);
	   Ein Farbwert eines Pixels auslesen.

      void Line(int x1,int y1,int x2,int y2,BYTE color,BYTE page);
	   Eine Linie zeichnen.

      void Rectangle(int x1,int y1,int x2,int y2,BYTE color,BYTE page);
	   Ein Rechteck zeichnen.

      void Bar(int x1,int y1,int x2,int y2,BYTE color,BYTE page);
	   Eine rechteckige Flche zeichnen.

      void Circle(float xm,float ym,float hm,float bm,float radius,BYTE color,BYTE page);
	   Einen Kreis, oder eine Ellipse zeichnen.
	   Diese Funktion ist fr Spiele noch ungeeignet, weil zu langsam.

      void FillCircle(float xm,float ym,float hm,float bm,float radius,BYTE color,BYTE page);
	   Einen ausgefllten Kreis, oder eine ausgefllte Ellipse zeichnen.
	   Diese Funktion ist fr Spiele noch ungeeignet, weil zu langsam.

      void Chassis(BYTE color);
	    Rahmen ber eine BIOS-Funktion auerhalb
	    der XY-Koordinaten zeichnen.


MOUSE.H/CPP  Mausfunktionen        Klasse : MOUSE

       BYTE Reset(void);
	    Maus zurcksetzen.

       void Off(void);
	    Mauscursor ausschalten.

       void On(void);
	    Mauscursor einschalten.

       int Gx(void);
	    X-Position der Maus im GAME-Modus auslesen.

       int Gy(void);
	    Y-Position der Maus im GAME-Modus auslesen.

       int Tx(void);
	    X-Position der Maus im TEXT-Modus auslesen.

       int Ty(void);
	    Y-Position der Maus im TEXT-Modus auslesen.

       int Key(void);
	    Welche Maustaste wurde gedrckt.


Enjoy ;-)

