home *** CD-ROM | disk | FTP | other *** search
/ T.C. 1,001 Programme der Spitzenklasse / T._C._1001_Programme_der_Spitzenklasse.iso / richter / 8351 / 8351.mhs / RICHTER.DTP / BWSPRITE / DOKUMENT.TXT next >
Text File  |  1980-01-12  |  30KB  |  650 lines

  1.  
  2. ***************************************************************
  3. * SHAREWARE        Programm-Paket  BWSPRITE 1.0               *
  4. *                                                             *
  5. *                                                             *
  6. * Dokumentation der VGA-, Sprite und Animations- Utilities    *
  7. * Autor : Bodo Wolf, Habichtstr. 114, W-4750 Unna, Germany    *
  8. *                       oder neue PLZ: 59425 Unna             *
  9. ***************************************************************
  10.  
  11. Technischen Daten:
  12. - Schnelle Low-Level-Grafik-Routinen für
  13.    * VGA 320x200x256
  14.    * VGA 320x240x256  3 Bildschirmseiten !
  15.    * Bilder einlesen und darstellen
  16.    * Farbpaletten manipulieren
  17. - Maus-Routinen
  18. - komfortable Text-Ein/Ausgabe mit z.Z. 3 Fonts
  19. - bis zu 255 Sprites gleichzeitig in 256 Farben !!
  20. - Animationen, bis zu 255 Sprites pro Animation,
  21.   das ergibt bei 255 gleichzeitigen Sprites eine theoretisch mögliche
  22.   Verwaltung von mehr als 65000 SPRITES gleichzeitig im Speicher.
  23.   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  24.   (Da die Verwaltung einer Animation ca 1.5 KB benötigt, wird diese
  25.    Zahl kaum erreichbar sein, denn 255 Animationen würden dann
  26.    über 400 KB verschlingen. Ausserdem ist an die 64KB-Grenze
  27.    für Daten bei Turbo-Pascal zu denken. Im Quellcode der UNIT
  28.    ANIMATION ist die entsprechende Konstante auf 20 gesetzt.
  29.    Sie können diese jederzeit dort ändern.)
  30.   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  31. -------------------------------------------------------------------------
  32.   *******************************************************************
  33.   *  GARANTIE- UND HAFTUNGSAUSSCHLUSS                               *
  34.   *******************************************************************
  35.   *  Der Autor haftet UNTER KEINEN UMSTÄNDEN für Schäden, die im    *
  36.   *  Zusammenhang mit diesem Programm bzw. diesen Programmier-Tools *
  37.   *  entstanden sind (z.B. Datenverluste usw.).                     *
  38.   *  Auch gibt der Autor KEINE GARANTIE für die Eignung dieses      *
  39.   *  Programmes bzw. dieser Programmier-Tools für einen bestimmten  *
  40.   *  Anwendungsfall.                                                *
  41.   *  Eine Garantie für fehlerfreie Programme kann auch nicht        *
  42.   *  übernommen werden.                                             *
  43.   *******************************************************************
  44.   Die UNITs unterliegen keiner der sonst im SHAREWARE-Bereich üblichen
  45.   Beschränkungen.
  46.   Wenn Sie am Quellcode dieser UNITs und der Programme interessiert
  47.   sind, so lassen Sie sich registrieren.
  48.   (Drucken Sie dazu die Datei "REGISTER.TXT" aus,
  49.    z.B. mit "Print Register.txt" oder "Copy Register.txt prn")
  50.   Als registrierter Benutzer können Sie die Sprite/Grafik-Tools
  51.   in Programmen verwenden und diese z.B. gewerblich vermarkten.
  52.  
  53.   Dieses Programm-Paket darf in keiner Weise ge-/verändert werden.
  54. -------------------------------------------------------------------------
  55.  
  56. Einleitung
  57.  
  58.  
  59. Diese Software-Tool-Sammlung ist für Rechner der IBM-AT
  60. (und Kompatible) -Klasse und höher konzipert.
  61. Weiterhin wird eine VGA-Karte benötigt.
  62. Eine MS-Kompaltible Mouse (Maustreiber!) wird unterstützt.
  63.  
  64. Sie können mit diesen Tools im VGA-Modus mit bis zu 256 Farben
  65. gleichzeitig zeichnen.
  66. Weiterhin können Sie auf einfache Weise sog. SPRITES einbinden,
  67. welche sich dann auch bewegen lassen. Es sind bis zu 255 SPRITES
  68. gleichzeitig darstellbar, wobei sich diese auch beliebig überlappen
  69. können. D.h. Sie können z.B. ein Sprite zwischen 2 anderen bewegen.
  70. ( Das ist bei Spielen wichtig, sie können z.B. eine Figur hinter
  71. einem Gegenstand (Bäume etc.) herlaufen lassen.)
  72. (!Der Sprite mit der höchsten Priorität liegt immer oben.!)
  73. Die Sprites können auch mit 256 verschiedenen Farben gezeichnet werden.
  74. Um eine bewegte Figur zu erzeugen, können Sie eine ANIMATION
  75. erstellen. Bei Bewegung der Animation steuert der Rechner die Abfolge
  76. der einzelnen Bilder.
  77. Pro Animation wird ein Platz der o.g. 255 Sprites benötigt.
  78. Zur Unterstützung existieren noch 3 Zeichensätze (Pixel-Fonts)
  79. unterschiedlicher Größe.
  80. Desweiteren können Sie Bilder laden und darstellen.
  81. Die Bilder haben ein eigenes Datei-Format (Endung ".PIC"). Um ein Bild
  82. zu erzeugen, extistiert ein Programm (GetPic.Exe), mit dem man Bilder
  83. aus Mal-Programmen oder ähnlicher Software "fotografieren" kann, indem
  84. eine Tastenkombination (HotKey) betätigt wird.
  85. Ein so festgehaltenen Bild speichern Sie dann mit einem weiteren Tool,
  86. nämlich "PicTool.Exe". Hier können Sie ein Bild oder nur einen
  87. Ausschnitt dieses Bildes speichern.
  88. Mit dem Programm "SpriteEd.Exe", dem SPRITE-Editor, zeichnen sie
  89. Ihre Sprites bzw. Ihre Animationen, die ja aus mehreren Sprites bestehen.
  90. In dieses Editor können Sie Ihre Animationen auch sofort testen, denn
  91. bei Aktivierung kann man sie mit den Pfeiltasten steuern.
  92.  
  93.  
  94.  
  95. (-------------------------------------------------)
  96.  
  97.  
  98. Bei den UNITs, die für Turbo-Pacal 6.0 zur Verfügung stehen,
  99. muß unterschieden werden zwischen denen, die sich auf den
  100. Standard-VGA-Grafikmodus 13hex (320x200x256) und denen, die sich
  101. auf einen neuen VGA-Modus 13hex (320x240x256) beziehen.
  102.  
  103. Für den Modus 320x200 in 265 Farben existieren folgende UNITs:
  104. V320_200 : Grundlegende Routinen wie Punkt-Setzen/Lesen etc.
  105. VMouse20 : Maus-Routinen
  106. VChr20   : Routinen zur Ein/Ausgabe auf dem Bildschirm
  107. VTools20 : Routinen zum Laden von Bildern und Farb-Paletten
  108. VGraph20 : Routinen zum zeichnen von Linien, Rechtecken etc.
  109.  
  110. Für den Modus 320x240 in 265 Farben existieren folgende UNITs:
  111.  
  112. V320_240 : Grundlegende Routinen wie Punkt-Setzen/Lesen etc.
  113. VMouse24 : Maus-Routinen
  114. VChr24   : Routinen zur Ein/Ausgabe auf dem Bildschirm
  115. VTools24 : Routinen zum Laden von Bildern und Farb-Paletten
  116. VGraph24 : Routinen zum zeichnen von Linien, Rechtecken etc.
  117. BWSprite : Sprite-Routinen
  118. Animatio : Animations-Routinen
  119. BWSprit2 : Sprite-Routinen     ( schnelleres Verfahren )
  120. Animati2 : Animations-Routinen (     "          "      )
  121.  
  122. Der 320x240 Modus unterscheidet sich nicht nur in der Auslösung,
  123. denn er besitzt im Gegensatz zum 320x200-Modus 3 Bildschirm-Seiten.
  124. (Der 320x200-Modus besitzt nur eine.)
  125. Daher sind Sprites auch nur im 320x240-Modus möglich, denn um ein
  126. Flimmern auf dem Bildschirm zu vermeiden, werden die Sprites
  127. auf einer Bildschirm-Seite gezeichnet, während eine andere angezeigt
  128. wird. Erst nach Beendigung des Zeichenvorganges wird die Bildschirm-
  129. Ausgabe auf diese Seite umgeschaltet.
  130.  
  131. (==================================================)
  132. Erklärung der UNITs:
  133. Mit ? versehene Routinen sind noch nicht voll getestet.
  134. Bei Fehlern bitte Autor benachrichtigen.
  135.  
  136.  
  137. V320_200 und V_320x240:
  138. Konstanten:
  139.       MaxX:Word=319     -- Größter Wert für X-Richtung
  140.       MaxY:Word=239/199 -- Größter Wert für Y-Richtung
  141.       NumX=320          -- Anzahl der Punkte in X-Richtung
  142.       NumY=240/200      -- Anzahl der Punkte in Y-Richtung
  143.  
  144.       BSeg:Word=$A000  -- Segment-Adresse des aktuellen Bildschirm-Speichers
  145.       BOfs:Word=$0000  -- Offset-Adresse  des aktuellen Bildschirm-Speichers
  146.  
  147. Variablen:
  148.       V_WaitVSync:Boolean=TRUE  -- Wenn TRUE, dann wird beim Wechseln der
  149.                                    Bildschirmseite, die angezeigt werden
  150.                                    soll, auf den vertikalen Rücklauf des
  151.                                    Elektronen-Strahls der Bildröhre des
  152.                                    Monitors gewartet, um zu verhindern,
  153.                                    daß mittem im Bildaufbau eines alten
  154.                                    Bildes ein neues hinzugefügt wird.
  155.                                    Sollte auf TRUE bleiben !!
  156.                                    Bei FALSE stellt sich eine
  157.                                    Geschwindigkeits-Steigerung ein, aber
  158.                                    alle bewegten Körper flimmern.
  159.  
  160. FUNCTION  V_InitVGA:Boolean;
  161.    Initialisiert VGA-Modus (320x200 bzw 320x240).
  162.    Ergibt TRUE, wenn alles OK verlaufen ist, sonst FALSE.
  163. PROCEDURE V_OldMode;
  164.   Beendet Grafikmodus.
  165.   Schaltet in den Ursprünglichen Bildschirm-(Text-)Modus zurück.
  166.   Sollte nur ausgeführt werden, wenn zuvor "V_InitVGA" erfolgreich war.
  167. FUNCTION  V_GetPixel(x,y:Word):Byte;
  168.   Holt die Farbe den Pixels, welches durch die Koordinaten x und y
  169.   adressiert wird.
  170. PROCEDURE V_PutPixel(x,y:Word; color:Byte);
  171.   Setzt die Farbe des Pixels, welches durch die Koordinaten x und y
  172.   adressiert wird.
  173. ?FUNCTION  V_ImageSize(lx,ly:Word):LongInt;
  174.   Berechnet die Größe des Puffers, in denen Grafik-Daten gespeichert
  175.   werden können. lx und ly geben die Breite und Höhe des Grafik-Objektes
  176.   auf den Bildschirm an.
  177. ?PROCEDURE V_GetImage(x,y,lx,ly:Word; s,o:Word);
  178.   Speichert einen Bildschirm-Ausschnitt in einen Puffer.
  179.   x und y geben die Position (rechts oben) an.
  180.   lx und ly geben Breite und Höhe an.
  181.   s und o sind die Segment und Offset-Adresse des Puffers.
  182. ?PROCEDURE V_Sprite(x,y:Word; lx, ly:Word; s,o:Word);
  183.   Zeichnet einen Bildschirm-Ausschnitt auf einem Puffer.
  184.   x und y geben die Position (rechts oben) an.
  185.   lx und ly geben Breite und Höhe an.
  186.   s und o sind die Segment und Offset-Adresse des Puffers.
  187. PROCEDURE V_ClearScreen(BKColor:Byte);
  188.   Löscht den aktuellen Bildschirm mit der angegeben Hintergrundfarbe.
  189.  
  190.  
  191. Folgende Routinen sind in beiden UNITs implementiert, haben aber
  192. nur in der UNIT V320_240 eine Funktion:
  193. PROCEDURE V_Screen(Side:Byte);
  194.   Schaltet für alle Grafik-Befehle auf die Bildschirm-Seite "Side" um.
  195.   Side kann Werte von 1..3 annehmen.
  196. FUNCTION  V_GetScreen:Byte;
  197.   Ergibt die aktuelle BildschirmSeite, die für Grafik-Befehle gültig
  198.   ist.
  199. PROCEDURE V_ShowScreen(Side:Byte);
  200.   Bestimmt, welche Bildschirm-Seite auf dem Monitor angezeigt wird.
  201.  
  202.  
  203. PROCEDURE V_SetBitPlane_PutPixel(x:Word); { Setzt für aktuelle x-Achse die Bitplane zum Sezten eines Pixels }
  204.   Setzt für die x-Koordinate die entsprechende Bitplane,
  205.   also den Speicherbereich, der für diese Koordinate gilt.
  206.   Da "V_PutPixel_act_BitPlane()" den Speicherbereich im Gegensatz zu
  207.   "V_PutPixel()" nicht auswählt, muß dieser hiermit selektiert werden.
  208.   Dieses hat einen Geschwindigkeitsvorteil, wenn man z.B. Bilder
  209.   darstellt. Wenn man ein Bild aus vertikalen Zeilen aufbaut, entfällt
  210.   durch die Benutzung dieser (BitPlane-)Routinen die Zeit der
  211.   Speicher-Selektierung. Sie braucht nur zu Beginn einer vertikalen Zeile
  212.   erfolgen.
  213. PROCEDURE V_PutPixel_act_BitPlane(x,y:Word; color:Byte);
  214.   Analog "V_PutPixel()", benötigt vorher "V_SetBitPlane()" mit selbiger
  215.   x-Koordinate.
  216. PROCEDURE V_SetBitPlane_GetPixel(x:Word); { Setzt für aktuelle x-Achse die Bitplane zum Lesen eines Pixels }
  217.   Wie oben, nur für "V_GetPixel_act_BitPlane()".
  218. FUNCTION  V_GetPixel_act_BitPlane(x,y:Word):Byte;
  219.   Analog "V_GetPixel()", sonst siehe "V_PutPixel_act_BitPlane()".
  220.  
  221.  
  222. V_Mouse20 und V_Mouse24  :
  223. DatenTypen:
  224.      V_MouseBufferType=Array[0..7] OF Byte;  Typ für Puffer, im dem der
  225.                                              Mauszeiger gespeichert ist.
  226.                                              Pro Byte 8 Punke für X-,
  227.                                              8 Bytes (0..7) für Y-Richtung.
  228. Konstanten:
  229.      V_MouseColor:Byte=14;                   Farbe für Mauszeiger.
  230. Variablen
  231.      V_MouseOK:Boolean;                      TRUE, wenn Maus angeschlossen
  232.                                              und gefunden wurde.
  233.      V_MouseHidden:Boolean;                  TRUE, wenn Maus ausgeschaltet
  234.                                              ist.
  235.      V_MouseBuffer:V_MouseBufferType;        In dieser Variable stehen die
  236.                                              Daten der Mauszeiger Darstellung.
  237.  
  238. PROCEDURE V_InitMouse;
  239.     Maus initialisieren. Setzt V_MouseOK
  240. PROCEDURE V_PaintMouse;
  241.     Bei jeden Aufruf wird der Mauszeiger an der neuen Position gezeichnet.
  242.     Diese Prozedur muß also im regelmäßigen Abständen aufgerufen werden.
  243.     Die ZeichenRoutine läuft also nicht über den Timer/Maus-Interrupt.
  244. PROCEDURE V_InitMouseCursor;
  245.     Initialisiert den Maus-Cursor mit den Daten, die in "V_MouseBuffer"
  246.     gespeichert sind.
  247. PROCEDURE V_ShowMouse;
  248.     Zeigt den Maus-Zeiger
  249. PROCEDURE V_HideMouse;
  250.     Versteckt den Mauszeiger
  251. PROCEDURE V_MousePos(VAR x,y:Word);
  252.     Ergibt die akt. Maus-Cursor Position.
  253. FUNCTION  V_LKey:Boolean;
  254.     TRUE, wenn linke Maus-Taste betätigt wird.
  255. FUNCTION  V_RKey:Boolean;
  256.     TRUE, wenn rechte Maus-Taste betätigt wird.
  257. FUNCTION  V_MouseInBox(x1,y1,x2,y2:Word):Boolean;
  258.     TRUE, wenn Maus-Cursor in Bereich von x1,y1 bis x2,y2.
  259. PROCEDURE V_SetHorRange(Min,Max:Word);
  260.     Setzt horizontale Maus-Cursor-Grenzen.
  261. PROCEDURE V_SetVertRange(Min,Max:Word);
  262.     Setzt vertikale Maus-Cursor-Granzen.
  263. PROCEDURE V_SetMickeyRatio(xm,ym:Word);
  264.     Setzt Maus-Geschwindigkeit in X und Y-Richtung.
  265.  
  266.  
  267. VChr20 und VChr24:
  268. Variablen:
  269.     FontPath:String;      Font-Datei-Pfad (Bsp: C:\, d:\test\)
  270.                           Wenn Font nicht in akt. Verzeichnis,
  271.                           dann muß hier der Pfad-Name stehen.
  272.                           ( BackSlash "\" am Ende !!!!!!!!! )
  273.     FontName:String;      Font-Datei-Name, muß angegeben werden,
  274.                           wenn ein Font geladen wird.
  275.                           Bei Font 0 wird IBM.CHR geladen.
  276.                           Font 1 braucht keine Datei.
  277.     Transparent:Boolean;  wenn TRUE, dann wird bei PixelFonts
  278.                           kein Hintergrund gezeichnet. Die
  279.                           Schrift ist also transparent.
  280.                           Kann jederzeit geändert werden.
  281.  
  282. PROCEDURE SetTextStyle(Font,Direction: Word; CharSize:Word);
  283.     Setzt aktuelle SchriftArt und lädt ggf. den Font in den
  284.     ArbeitsSpeicher (z.B. Font 0).
  285.     "Font" gibt die FontNummer an.
  286.     Die anderen Parameter haben noch keine Bedeutung.
  287.     Am Besten, sie Übergeben dort 0, alse z.B.
  288.       SetTextStyle(0,0,0) oder (1,0,0).
  289.     Z.z. gibt es nur 3 Fonts, 0,1 und 2.
  290.     Diese sind PixelFonts unterschiedlicher Größe:
  291.       Font 0 : 8x16 Pixel pro Zeichen
  292.       Font 1 : 8x8  Pixel pro Zeichen
  293.  
  294. PROCEDURE DelTextStyle(Font:Word);
  295.     Vor Programm-Ende sollten die gesetzten Zeichensätze mit "DelTextStyle"
  296.     beendet werden. Hier wird ggf. der Zeichensatz aus den Speicher entfernt.
  297.     In "Font" wird die Font-Nr. übergeben.
  298. FUNCTION  TextHeight(TextString:String):Word;
  299.     Ergibt die Höhe der Zeichen in "TextString" in Pixel
  300.     für den akt. Zeichensatz.
  301. FUNCTION  TextWidth(TextString:String):Word;
  302.     Ergibt die Breite des TextStrings in Pixel für den akt. Zeichensatz.
  303. PROCEDURE GrWriteChar(x,y:Word; c:Char);
  304.     Zeichnet das Zeichen in der Variablen "c" an der Stelle "x,y".
  305. PROCEDURE GrWrite(Text:String);
  306.     Schreibt einen Text in der Stelle des momentanen TextCursors.
  307. PROCEDURE GrWriteLn(Text:String);
  308.     Schreibt einen Text in der Stelle des momentanen TextCursors
  309.     und setzt den Cursor an den Anfang der nächsten Zeile.
  310. PROCEDURE GrGoToXY(x,y:Word);
  311.     Setzt den TextCursor an die Stelle x,y
  312.     Zu Beachten ist, das eine Cursorstelle die Breite eines Zeichens
  313.     des akt. Zeichensatzen besitzt.
  314.     Bei Font 0 ergibt "GrGoToXY(3,4)" die Grafik-Koordinaten 48,32,
  315.     da ein Zeichen dort 16 Pixel breit und 8 Pixel hoch ist.
  316. FUNCTION  WhereX:Word;
  317.     Ergibt die akt. TextCursor-X-Position.
  318. FUNCTION  WhereY:Word;
  319.     Ergibt die akt. TextCursor-Y-Position.
  320. PROCEDURE GrTextColor(Color:Byte);
  321.     Setzt Zeichen-Farbe für Textausgabe.
  322. PROCEDURE GrTextBackGround(Color:Byte);
  323.     Setzt Hintergrundfarbe für Textausgabe,
  324.     ist nur relevant, wenn die Konstante "Transparent" FALSE ist.
  325. FUNCTION  GrGetTextColor:Byte;
  326.     Ergibt aktuelle Zeichen-Farbe für Textausgabe.
  327. FUNCTION  GrGetTextBackGround:Byte;
  328.     Ergibt aktuelle Hintergrundfarbe für Textausgabe
  329. PROCEDURE OutTextXY(x,y:Word;TextString:String);
  330.    Gibt einen TextString an der Pixel-Position x,y aus.
  331. PROCEDURE OutText(TextString:String);
  332.    Gibt einen TextString an der aktuellen Grafik-Cursor-Position aus.
  333.    (Nicht zu verwechseln mit dem TextCursor)
  334. PROCEDURE GrWriteShadow(Text:String; dist:Byte; Color, ShadowColor:Byte);
  335.    Gibt einen Text mit Hintergrund-Schatten aus an der akt.
  336.    Text-CursorPosition.
  337.    "Dist" gibt einen Abstand an, an dem der Schatten liegt. (z.B. 1..4)
  338.    "Color" ist die Textfarbe, "ShadowColor" ist die Farbe des Schattens.
  339. FUNCTION  GrReadStr(NumChars:Byte):String;
  340.    Liest einen String ein. Die Anzahl der möglichen Stellen wird
  341.    mit "NumChars" übergeben.
  342.  
  343.  
  344. VTools20 und VTools24:
  345. Konstanten:
  346.      AnzFarben=256;           Anzahl der max. gleichzeitig
  347.                               darstellbaren Farben
  348. DatenTypen:
  349.      PaletteType=Array[0..(AnzFarben*3)-1] OF Byte;
  350.                               In einer Variable dieses Typs
  351.                               kann eine Farbpalette gespeichert
  352.                               werden.
  353.                               Es stehen pro FarbAnteil für
  354.                               Rot, Grün, Blau 256 Bytes zur
  355.                               Verfügung. Die ersten 256 Bytes
  356.                               stehen also Rot zur Verfügung,
  357.                               die nächsten Grün und die letzten
  358.                               256 sind für Blau.
  359.  
  360. PROCEDURE LoadPicture(Name:String; x,y:Word; VAR Error:Integer);
  361.     Liest ein Bild "Name" und zeichnet es an der Stelle "x,y"
  362.     auf den aktuellen Bildschirm.
  363.     Ist Error<>0 dann ist ein Fehler unterlaufen.
  364.     Die Error-Code sind die gleichen wir die von "IOResult".
  365. PROCEDURE LoadPalette(Name:String; VAR Error:Integer);
  366.     Liest eine Farbpalette "Name" in den internen Paletten-Speicher.
  367.     Ist Error<>0 dann ist ein Fehler unterlaufen.
  368. PROCEDURE InitPalette;
  369.     Gibt die Farb-Paletteninformationen des internen Paletten-Speichers
  370.     an die VGA-Karte weiter und setzt diese Palette.
  371. PROCEDURE ShowPalette(VAR Palette:PaletteType);
  372.     Gibt die Farb-Paletteninformationen der übergeben Variable
  373.     an die VGA-Karte weiter und setzt diese Palette.
  374. PROCEDURE GetPalette(VAR Palette:PaletteType);
  375.     Speichert die aktuelle Farb-Palette der VGA-Karte in die
  376.     übergebene Variable.
  377. PROCEDURE SoftPalette(Shades:Byte);
  378.     Macht aus einem dunklen Bildschirm in "Shades" Schritten die
  379.     Farbe hinein.
  380.     Hiermit wird ein sog. Aufblenden des Bildschirms ermöglicht.
  381.     Der Bildschirm sollte vorher mit "PaletteDark(0)" auf schwarz
  382.     gestellt werden (Sofern die Farbe 0 schwarz ist).
  383. PROCEDURE PaletteDark(Color:Byte);
  384.     Stellt die VGA-Farbpalette auf eine Farbe "Color" um.
  385.     Berührt nicht den internen Palettenspeicher.
  386. Nur für VTools24:
  387. PROCEDURE LoadPicture320_240(NamePic,NamePal:String; VAR Error:Integer);
  388.     Liest ein Bild mit der dazugehörigen Palette, deren Namen
  389.     übergeben werden und stellt das Bild auf dem Bildschirm dar.
  390.     Das Bild wird dabei in allen 3 Bildschirm-Speicher geladen,
  391.     was besondere Bedeutung bei den SPRITE-Routinen besitzt.
  392.  
  393.  
  394.  
  395. SPRITE-Routinen:
  396.  
  397. BWSprite:
  398.  
  399. Konstanten:
  400.       MaxSprites=255         Maximale Anzahl von Sprites
  401.       Transparent :Byte =0   Tranparente Farbe für Sprites.
  402.                              Sollte 0 sein, kann aber geändert werden.
  403.       NumSprites  :Byte =MaxSprites; Aktuelle Anzahl der benutzten Sprites.
  404.  
  405.  
  406. PROCEDURE ActPages
  407.     Muß regelmäßig aufgerufen werden. Hier werden die von den
  408.     Spritebefehlen geforderten Grafiken aktualisiert.
  409. PROCEDURE LoadSprite(Name:String; Nr:Byte);
  410.     Lädt den Sprite "Name" unter die Spritenummer "Nr" in
  411.     des Hauptspeicher des Rechners (in den HEAP).
  412. PROCEDURE DelSpriteBuffer(Nr:Byte);
  413.     Entfernt den Sprite "Nr" und gibt den Speicherplatz wieder
  414.     frei.
  415. PROCEDURE StartSprite(x,y:Word; Nr,Level:Byte);
  416.     Startet einen geladen Sprite an der Stelle "x,y".
  417.     "Nr" ist die Spritenummer die gestartet werden soll.
  418.     "Level" gibt die Spritepriorität an, die bestimmt,
  419.     welcher Sprite bei einer Überlagerung oben oder
  420.     darunter erscheint.
  421.     (Dazu gilt: Je größer der Wert, desto höher die Priorität.
  422.     Der Sprite mit der höchsten Priorität liegt immer oben.)
  423.     Aktivität erst bei "ActPages". "ActPages" sollte nach
  424.     diesem Befehl 2x hintereinander erfolgen.
  425. PROCEDURE StopSprite(Nr:Byte);
  426.     Entfernt den Sprite "Nr" von Bildschirm.
  427.     Auch hier bitte 2x ActPages.
  428. ?PROCEDURE SpriteLevel(NewLevel:Byte; Nr:Byte);
  429.     Setzt eine neue Spritepriorität "NewLevel" des
  430.     Sprites "Nr".
  431. PROCEDURE MoveSprite(x,y:Word; Nr:Byte);
  432.     Bewegt den Sprite "Nr" zur Position (x,y).
  433.     Ausführung erfolgt durch 1x "ActPages".
  434. FUNCTION  SpriteCollisionEasy(Nr1, Nr2:Byte):Boolean;
  435.     Wenn 2 Sprites der Nummern "Nr1,Nr2" übereinander
  436.     liegen (hier reicht das Rechteck der Spritedefinition
  437.     aus Höhe und Breite), dann TRUE.
  438. FUNCTION  SpriteCollision(Nr1, Nr2:Byte):Boolean;
  439.     Wenn 2 Sprites "Nr1,Nr2" sich mit gesetzen Pixeln berühren,
  440.     dann TRUE. Etwas langsamer als "...Easy()", da mehr
  441.     Berechnungen.
  442.  
  443. Animation :
  444.  
  445. Konstanten:
  446.       MaxAnimationen=20         Maximale Anzahl der Animationen.
  447.       MaxAnimationSprites=255   Maximale Anzahl der Sprites pro Animation.
  448.  
  449.  
  450. PROCEDURE InitAnimation(Nr:Byte; SpritePos:Byte; Num:Byte; Name:String; Level:Byte);
  451.     Initialisiert die Animation "Nr" im Spritebereich "SpritePos".
  452.     "Num" erhält die Anzahl der geladenen Sprites, während "Name"
  453.     der Sprite-Dateiname ist. "Level" gibt die Priorität des Sprites
  454.     an. Der Dateiname muß eine fortlaufende Nummer beinhalten und
  455.     die Endung ".Spr" besitzen. (Siehe Demo-Prg.)
  456. PROCEDURE DelAnimation(Nr:Byte);
  457.     Entfernt eine Animation "Nr" aus dem Speicher.
  458. PROCEDURE StartAnimation(x,y:Word; Start,Stop:Byte; Nr:Byte);
  459.    Start eine geladene Animation "Nr" an der Stelle "x,y".
  460.    "Start" und "Stop" geben die SpriteNummern an, die
  461.    zyklisch beim Ablaufen von "ActPages" dargestellt werden.
  462.    Diese Werte können mit "NewAnimationData" geändert werden.
  463.    (2x ActPages !)
  464. PROCEDURE StopAnimation(Nr:Byte);
  465.    Stoppt die Animation und entfernt sie beim nächsten "ActPages" von
  466.    Bildschirm.
  467.    (2x ActPages !)
  468. PROCEDURE MoveAnimation(x,y:Word; Nr:Byte);
  469.    Versetzt die Animation "Nr" nach "x,y", wobei der Spriteablauf
  470.    gesteuert wird (das nächste Sprite wird gezeichnet.)
  471. PROCEDURE NewAnimationData(Start,Stop:Byte; Nr:Byte);
  472.    Setzt neue Werte für den zyklischen Ablauf der Sprite in
  473.    der Animation "Nr".
  474.  
  475.  
  476.  
  477.  
  478. Die Softwaretools
  479.  
  480. GetPicture "GetPic.Exe"
  481. Parameter: /h :Hilfe
  482.  
  483. GetPicture ist ein residentes (TSR-) Programm, welches ermöglicht
  484. aus (Mal-)Programmen eine Bildschirmkopie anzufertigen.
  485. Wichtig für vernüftige Ergebnisse ist, das das Programm den
  486. VGA-Modus 320x200x256 benutzt.
  487. Durch Betätigen der Tastenkombination (ALT)-(F6) wird der
  488. Bildschirminhalt in einem Daten-Puffer im Hauptspeicher gesichert.
  489. Mit dem Programm "PicTool" können Sie das Bild (oder einen Ausschnitt davon)
  490. in eine Datei speichern.
  491. GetPic erzeugt beim Start eine Datei "GetPic.Dat".
  492.  
  493.  
  494. PicTool "PicTool.Exe"
  495. Parameter: /h :Hilfe   /c :mit Farbe
  496.  
  497.  
  498. Pictool bietet folgende Menü-Auswahl:
  499.   1-Bild ansehen
  500.      (muß entweder vorher geladen worden sein oder
  501.       mit Punkt "7" von GetPic geholt werden.)
  502.   2-Bild speichen (als .PIC)
  503.   3-Ausschnitt speichern
  504.        1-Ausschnitt wählen
  505.            Sie wählen ein BildAusschnitt, indem Sie
  506.            ein Rechteck steuern. Das Recheck selbst gehört
  507.            zum Ausschnitt.
  508.            Mit (+,-) ändern Sie die Schritt-Weite, während
  509.            Sie mit den Pfeiltasten dieses steuern.
  510.            Weitere Infos entnehmen Sie bitte dem Programm.
  511.        2-gewählten Ausschnitt speichern (.PIC)
  512.        3-gewählten Ausschnitt als Sprite-Datei speichern (.SPR)
  513.   4-Bild laden (.PIC)
  514.   5-Farbpalette speichern (.PAL)  (NICHT VERGESSEN !!)
  515.   6-Farbpalette laden (.PAL)
  516.   7-Daten von GetPic holen.
  517.       Die Bild-Daten werden aus dem Bild-Puffer von GetPic
  518.       in den von PicTool kopiert.
  519.       Dieser Vorgang sollte zuerst angewendet werden, wenn ein
  520.       von GetPic gespeichertes  Bild bearbeitet werden soll.
  521.  
  522.  
  523. SpriteEditor "SpriteEd.Exe"
  524. Parameter: /h  :Hilfe
  525.            /Gn :Größe eines Zeichenfeldes in Pixel.
  526.                 Werte für n : 1..5, 5=default.
  527.                 Einfach mal Ausprobieren.... (Bsp: /G3)
  528.            /Nn :Vordefiniere Größen der Arbeitsfläche.
  529.                 Werte für n : 1,2,3
  530.                 1=40x35   2=62x50   3=76x66
  531.                 Einfach mal Ausprobieren.... (Bsp: /N3)
  532.  
  533. Der Sprite-Editor läuft im VGA-Modus 320x240x256.
  534. Er wurde mit den schon genannten UNITs entwickelt.
  535.  
  536.  
  537. Befehle:
  538.         F1 -Hilfe (Hier sind alle Befehle aufgelistet)
  539.          L -Sprite Laden
  540.          S -Sprite Speichern
  541.       1..4 -Laden von Referenz-Sprites in den vorgezeichneten Kästchen.
  542.             Sinnvoll für das Zeichnen von Animationen, da man beim
  543.             Zeichnen andere Sprites sehen kann.
  544. Pfeiltasten-Sprite um 1 Pixel verschieben
  545.          C -Sprite löschen. Neue HintergrundFarbe ist die akt. ZeichenFarbe
  546.          G -Spritegröße ändern durch Angabe von Höhe und Breite.
  547.          H -Definition der "Transparenten" Farbe des Sprites ändern
  548.             (sollte Paletteneintrag 0=schwarz bleiben)
  549.          U -Sprite vertikal spiegeln
  550.          I -Sprite Horizontal spiegeln
  551.          P -Palette laden
  552.        +/- -Farbwert der akt. Zeichenfarbe um 1 verändern.
  553.        ESC -Programm verlassen.
  554.  
  555. Befehle der Animation:
  556. WICHTIG: Animationen bestehen aus einem oder mehreren Sprites.
  557. Sie müssen alle den selben Namen gefolgt von ihrer Ablaufnummer
  558. und die Endung ".SPR" besitzen.
  559. Bsp:  SPRITE1.SPR  SPRITE2.SPR  SPRITE3.SPR .... SPRITE13.SPR usw.
  560.  
  561.          D -Definition der Animation
  562.             Bitte Sprite-Name und Anzahl der Sprites angeben.
  563.             Bsp: SPRITE und 13
  564.          A -Animation testen (ACHTUNG: Bitte erst DEFINIEREN)
  565.                 Pfeiltasten :Sprite bewegen
  566.                Page UP/DOWN :"Wait"-Wert um 10 verändern.
  567.                              Verzögerungswert zwischen den Sprite-
  568.                              Bewegungen.
  569.                              BITTE AUSPROBIEREN BEI FLIMMERNDEN SPRITES.
  570.                              BEI SCHNELLEN RECHNERN KANN DIESER EFFEKT
  571.                              AUFTAUCHEN. WARSCHEINLICH EIN FEHLER
  572.                              IN DER BILDAUFBAU-SYNCHRONISATION.
  573.                              EIN "WAIT" VON 20 WIRKT WUNDER !!!!!!!!
  574.                        Home :Setzt Wait-Wert auf 0.
  575.                         +/- :Andert die Schrittweite der Bewegungen
  576.                              in Pixel. Wenn der Wert=0, dann verändert
  577.                              sich die Animations-Position nicht.
  578.                           V :Warten auf Vertikale Synchronisation EIN/AUS
  579.                              Bei AUS sind die Sprites schneller, filmmern
  580.                              aber.
  581.  
  582.  
  583.  
  584. Bemerkungen/Empfehlungen:
  585. In den mitgelieferten Software-Tools haben Sie sich schnell
  586. eingearbeitet. Sie sollten ein bischen damit exprimentieren.
  587.  
  588. Benutzen Sie für Bilder die Endung .PIC, für Sprite .SPR
  589. und für Paletten .PAL.
  590.  
  591.  
  592. NEU !!!!
  593. Die UNIT BWSprit2 (-->2!) ist aufgrund eines anderen Systems viel schneller
  594. als die UNIT BWSprite. Hier werden die Sprite-Prioritäten über die
  595. Farbpalette abgewickelt.
  596. Dazu existiert ein ARRAY "Level[1..NumColors] OF Byte", in dem
  597. für jeden Paletteneintrag eine SpritePriorität eingetragen werden kann.
  598. Dazu gilt: Je größer der Wert, desto höher die Priorität.
  599. Der Sprite mit der höchsten Priorität liegt immer oben.
  600. Die Alten "Level-Parameter" in den Sprite-Routinen sind also
  601. inaktiv, werden aber aus kompatibilitätsgründen beibehalten.
  602. NEU !!!!
  603.  
  604. *** Ein Tip : ***
  605. Wenn sie in einer schon ablaufenden Szene neue Sprite aufrufen wollen,
  606. dann machen Sie es wie folgt:
  607.   1) Ladem Sie alle benötigten Sprites in den Speicher.
  608.   2) Starten Sie alle Sprites (2x ActPages !).
  609.      Den Sprites, die noch nicht erscheinen sollen, geben
  610.      Sie eine Bildschirm-Koordinate von >(320,200) z.B. (1000,1000).
  611.      Dann erscheinen Sie nicht.
  612.      Werden diese Sprite dann benötigt, werden sie mit "MoveSprite"
  613.      an die gewünschte Position gebracht.
  614.   3) Lassen Sie ein Sprite einfach durch "MoveSprite" verschwinden,
  615.      indem Sie eine Koordinate von (1000,1000) angeben.
  616. Das gleiche gilt auch für Animationen !!
  617.  
  618. FÜR SONSTIGE TIPS SEHEH SIE SICH DIE DEMONTRATIONS-SOFTWARE AN !
  619.  
  620.  
  621.  
  622. Pascal-Programm-Source:
  623. Falls Sie Interesse an den Sourcen zeigen, hier einige Zeilen dazu:
  624. Ich werde die Sourcen nicht großartig ändern. Es können also
  625. durchaus PROCEDURE-Leichen { oder auskommentierte ältere
  626. Programm-Leichen und Debug-Routinen (->leicht zu finden)} vorkommen.
  627. Diese sind aber in meinen Augen nicht störend, sondern im Gegenteil
  628. teilweise gut zum Programmverständnis, da man oft bei neuen, optimierten
  629. Routinen längere Zeit benötigt, um diese zu durchschauen.
  630. Dort, wo Kommentar nötig ist, steht er auch.
  631. Der Source ist größtenteils nach folgendem Beispiel formatiert
  632. (also sehr übersichtlich)
  633.  
  634. PROCEDURE Beispiel;
  635.   VAR Test:Real;
  636.   BEGIN
  637.     WriteLn(..);
  638.     IF KeyPressed THEN GoToXY(..);
  639.     REPEAT
  640.     ...
  641.     UNTIL...
  642.   END;
  643.  
  644. Die Sourcen für das Datei-Auswahl-Fenster in PICTOOL und für
  645. die TSR-Steuerung in GETPIC (beides TPUs) können z.Z. nicht
  646. mitgeliefert werden.
  647.  
  648.  
  649.  
  650.