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 >
Wrap
Text File
|
1980-01-12
|
30KB
|
650 lines
***************************************************************
* SHAREWARE Programm-Paket BWSPRITE 1.0 *
* *
* *
* Dokumentation der VGA-, Sprite und Animations- Utilities *
* Autor : Bodo Wolf, Habichtstr. 114, W-4750 Unna, Germany *
* oder neue PLZ: 59425 Unna *
***************************************************************
Technischen Daten:
- Schnelle Low-Level-Grafik-Routinen für
* VGA 320x200x256
* VGA 320x240x256 3 Bildschirmseiten !
* Bilder einlesen und darstellen
* Farbpaletten manipulieren
- Maus-Routinen
- komfortable Text-Ein/Ausgabe mit z.Z. 3 Fonts
- bis zu 255 Sprites gleichzeitig in 256 Farben !!
- Animationen, bis zu 255 Sprites pro Animation,
das ergibt bei 255 gleichzeitigen Sprites eine theoretisch mögliche
Verwaltung von mehr als 65000 SPRITES gleichzeitig im Speicher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(Da die Verwaltung einer Animation ca 1.5 KB benötigt, wird diese
Zahl kaum erreichbar sein, denn 255 Animationen würden dann
über 400 KB verschlingen. Ausserdem ist an die 64KB-Grenze
für Daten bei Turbo-Pascal zu denken. Im Quellcode der UNIT
ANIMATION ist die entsprechende Konstante auf 20 gesetzt.
Sie können diese jederzeit dort ändern.)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-------------------------------------------------------------------------
*******************************************************************
* GARANTIE- UND HAFTUNGSAUSSCHLUSS *
*******************************************************************
* Der Autor haftet UNTER KEINEN UMSTÄNDEN für Schäden, die im *
* Zusammenhang mit diesem Programm bzw. diesen Programmier-Tools *
* entstanden sind (z.B. Datenverluste usw.). *
* Auch gibt der Autor KEINE GARANTIE für die Eignung dieses *
* Programmes bzw. dieser Programmier-Tools für einen bestimmten *
* Anwendungsfall. *
* Eine Garantie für fehlerfreie Programme kann auch nicht *
* übernommen werden. *
*******************************************************************
Die UNITs unterliegen keiner der sonst im SHAREWARE-Bereich üblichen
Beschränkungen.
Wenn Sie am Quellcode dieser UNITs und der Programme interessiert
sind, so lassen Sie sich registrieren.
(Drucken Sie dazu die Datei "REGISTER.TXT" aus,
z.B. mit "Print Register.txt" oder "Copy Register.txt prn")
Als registrierter Benutzer können Sie die Sprite/Grafik-Tools
in Programmen verwenden und diese z.B. gewerblich vermarkten.
Dieses Programm-Paket darf in keiner Weise ge-/verändert werden.
-------------------------------------------------------------------------
Einleitung
Diese Software-Tool-Sammlung ist für Rechner der IBM-AT
(und Kompatible) -Klasse und höher konzipert.
Weiterhin wird eine VGA-Karte benötigt.
Eine MS-Kompaltible Mouse (Maustreiber!) wird unterstützt.
Sie können mit diesen Tools im VGA-Modus mit bis zu 256 Farben
gleichzeitig zeichnen.
Weiterhin können Sie auf einfache Weise sog. SPRITES einbinden,
welche sich dann auch bewegen lassen. Es sind bis zu 255 SPRITES
gleichzeitig darstellbar, wobei sich diese auch beliebig überlappen
können. D.h. Sie können z.B. ein Sprite zwischen 2 anderen bewegen.
( Das ist bei Spielen wichtig, sie können z.B. eine Figur hinter
einem Gegenstand (Bäume etc.) herlaufen lassen.)
(!Der Sprite mit der höchsten Priorität liegt immer oben.!)
Die Sprites können auch mit 256 verschiedenen Farben gezeichnet werden.
Um eine bewegte Figur zu erzeugen, können Sie eine ANIMATION
erstellen. Bei Bewegung der Animation steuert der Rechner die Abfolge
der einzelnen Bilder.
Pro Animation wird ein Platz der o.g. 255 Sprites benötigt.
Zur Unterstützung existieren noch 3 Zeichensätze (Pixel-Fonts)
unterschiedlicher Größe.
Desweiteren können Sie Bilder laden und darstellen.
Die Bilder haben ein eigenes Datei-Format (Endung ".PIC"). Um ein Bild
zu erzeugen, extistiert ein Programm (GetPic.Exe), mit dem man Bilder
aus Mal-Programmen oder ähnlicher Software "fotografieren" kann, indem
eine Tastenkombination (HotKey) betätigt wird.
Ein so festgehaltenen Bild speichern Sie dann mit einem weiteren Tool,
nämlich "PicTool.Exe". Hier können Sie ein Bild oder nur einen
Ausschnitt dieses Bildes speichern.
Mit dem Programm "SpriteEd.Exe", dem SPRITE-Editor, zeichnen sie
Ihre Sprites bzw. Ihre Animationen, die ja aus mehreren Sprites bestehen.
In dieses Editor können Sie Ihre Animationen auch sofort testen, denn
bei Aktivierung kann man sie mit den Pfeiltasten steuern.
(-------------------------------------------------)
Bei den UNITs, die für Turbo-Pacal 6.0 zur Verfügung stehen,
muß unterschieden werden zwischen denen, die sich auf den
Standard-VGA-Grafikmodus 13hex (320x200x256) und denen, die sich
auf einen neuen VGA-Modus 13hex (320x240x256) beziehen.
Für den Modus 320x200 in 265 Farben existieren folgende UNITs:
V320_200 : Grundlegende Routinen wie Punkt-Setzen/Lesen etc.
VMouse20 : Maus-Routinen
VChr20 : Routinen zur Ein/Ausgabe auf dem Bildschirm
VTools20 : Routinen zum Laden von Bildern und Farb-Paletten
VGraph20 : Routinen zum zeichnen von Linien, Rechtecken etc.
Für den Modus 320x240 in 265 Farben existieren folgende UNITs:
V320_240 : Grundlegende Routinen wie Punkt-Setzen/Lesen etc.
VMouse24 : Maus-Routinen
VChr24 : Routinen zur Ein/Ausgabe auf dem Bildschirm
VTools24 : Routinen zum Laden von Bildern und Farb-Paletten
VGraph24 : Routinen zum zeichnen von Linien, Rechtecken etc.
BWSprite : Sprite-Routinen
Animatio : Animations-Routinen
BWSprit2 : Sprite-Routinen ( schnelleres Verfahren )
Animati2 : Animations-Routinen ( " " )
Der 320x240 Modus unterscheidet sich nicht nur in der Auslösung,
denn er besitzt im Gegensatz zum 320x200-Modus 3 Bildschirm-Seiten.
(Der 320x200-Modus besitzt nur eine.)
Daher sind Sprites auch nur im 320x240-Modus möglich, denn um ein
Flimmern auf dem Bildschirm zu vermeiden, werden die Sprites
auf einer Bildschirm-Seite gezeichnet, während eine andere angezeigt
wird. Erst nach Beendigung des Zeichenvorganges wird die Bildschirm-
Ausgabe auf diese Seite umgeschaltet.
(==================================================)
Erklärung der UNITs:
Mit ? versehene Routinen sind noch nicht voll getestet.
Bei Fehlern bitte Autor benachrichtigen.
V320_200 und V_320x240:
Konstanten:
MaxX:Word=319 -- Größter Wert für X-Richtung
MaxY:Word=239/199 -- Größter Wert für Y-Richtung
NumX=320 -- Anzahl der Punkte in X-Richtung
NumY=240/200 -- Anzahl der Punkte in Y-Richtung
BSeg:Word=$A000 -- Segment-Adresse des aktuellen Bildschirm-Speichers
BOfs:Word=$0000 -- Offset-Adresse des aktuellen Bildschirm-Speichers
Variablen:
V_WaitVSync:Boolean=TRUE -- Wenn TRUE, dann wird beim Wechseln der
Bildschirmseite, die angezeigt werden
soll, auf den vertikalen Rücklauf des
Elektronen-Strahls der Bildröhre des
Monitors gewartet, um zu verhindern,
daß mittem im Bildaufbau eines alten
Bildes ein neues hinzugefügt wird.
Sollte auf TRUE bleiben !!
Bei FALSE stellt sich eine
Geschwindigkeits-Steigerung ein, aber
alle bewegten Körper flimmern.
FUNCTION V_InitVGA:Boolean;
Initialisiert VGA-Modus (320x200 bzw 320x240).
Ergibt TRUE, wenn alles OK verlaufen ist, sonst FALSE.
PROCEDURE V_OldMode;
Beendet Grafikmodus.
Schaltet in den Ursprünglichen Bildschirm-(Text-)Modus zurück.
Sollte nur ausgeführt werden, wenn zuvor "V_InitVGA" erfolgreich war.
FUNCTION V_GetPixel(x,y:Word):Byte;
Holt die Farbe den Pixels, welches durch die Koordinaten x und y
adressiert wird.
PROCEDURE V_PutPixel(x,y:Word; color:Byte);
Setzt die Farbe des Pixels, welches durch die Koordinaten x und y
adressiert wird.
?FUNCTION V_ImageSize(lx,ly:Word):LongInt;
Berechnet die Größe des Puffers, in denen Grafik-Daten gespeichert
werden können. lx und ly geben die Breite und Höhe des Grafik-Objektes
auf den Bildschirm an.
?PROCEDURE V_GetImage(x,y,lx,ly:Word; s,o:Word);
Speichert einen Bildschirm-Ausschnitt in einen Puffer.
x und y geben die Position (rechts oben) an.
lx und ly geben Breite und Höhe an.
s und o sind die Segment und Offset-Adresse des Puffers.
?PROCEDURE V_Sprite(x,y:Word; lx, ly:Word; s,o:Word);
Zeichnet einen Bildschirm-Ausschnitt auf einem Puffer.
x und y geben die Position (rechts oben) an.
lx und ly geben Breite und Höhe an.
s und o sind die Segment und Offset-Adresse des Puffers.
PROCEDURE V_ClearScreen(BKColor:Byte);
Löscht den aktuellen Bildschirm mit der angegeben Hintergrundfarbe.
Folgende Routinen sind in beiden UNITs implementiert, haben aber
nur in der UNIT V320_240 eine Funktion:
PROCEDURE V_Screen(Side:Byte);
Schaltet für alle Grafik-Befehle auf die Bildschirm-Seite "Side" um.
Side kann Werte von 1..3 annehmen.
FUNCTION V_GetScreen:Byte;
Ergibt die aktuelle BildschirmSeite, die für Grafik-Befehle gültig
ist.
PROCEDURE V_ShowScreen(Side:Byte);
Bestimmt, welche Bildschirm-Seite auf dem Monitor angezeigt wird.
PROCEDURE V_SetBitPlane_PutPixel(x:Word); { Setzt für aktuelle x-Achse die Bitplane zum Sezten eines Pixels }
Setzt für die x-Koordinate die entsprechende Bitplane,
also den Speicherbereich, der für diese Koordinate gilt.
Da "V_PutPixel_act_BitPlane()" den Speicherbereich im Gegensatz zu
"V_PutPixel()" nicht auswählt, muß dieser hiermit selektiert werden.
Dieses hat einen Geschwindigkeitsvorteil, wenn man z.B. Bilder
darstellt. Wenn man ein Bild aus vertikalen Zeilen aufbaut, entfällt
durch die Benutzung dieser (BitPlane-)Routinen die Zeit der
Speicher-Selektierung. Sie braucht nur zu Beginn einer vertikalen Zeile
erfolgen.
PROCEDURE V_PutPixel_act_BitPlane(x,y:Word; color:Byte);
Analog "V_PutPixel()", benötigt vorher "V_SetBitPlane()" mit selbiger
x-Koordinate.
PROCEDURE V_SetBitPlane_GetPixel(x:Word); { Setzt für aktuelle x-Achse die Bitplane zum Lesen eines Pixels }
Wie oben, nur für "V_GetPixel_act_BitPlane()".
FUNCTION V_GetPixel_act_BitPlane(x,y:Word):Byte;
Analog "V_GetPixel()", sonst siehe "V_PutPixel_act_BitPlane()".
V_Mouse20 und V_Mouse24 :
DatenTypen:
V_MouseBufferType=Array[0..7] OF Byte; Typ für Puffer, im dem der
Mauszeiger gespeichert ist.
Pro Byte 8 Punke für X-,
8 Bytes (0..7) für Y-Richtung.
Konstanten:
V_MouseColor:Byte=14; Farbe für Mauszeiger.
Variablen
V_MouseOK:Boolean; TRUE, wenn Maus angeschlossen
und gefunden wurde.
V_MouseHidden:Boolean; TRUE, wenn Maus ausgeschaltet
ist.
V_MouseBuffer:V_MouseBufferType; In dieser Variable stehen die
Daten der Mauszeiger Darstellung.
PROCEDURE V_InitMouse;
Maus initialisieren. Setzt V_MouseOK
PROCEDURE V_PaintMouse;
Bei jeden Aufruf wird der Mauszeiger an der neuen Position gezeichnet.
Diese Prozedur muß also im regelmäßigen Abständen aufgerufen werden.
Die ZeichenRoutine läuft also nicht über den Timer/Maus-Interrupt.
PROCEDURE V_InitMouseCursor;
Initialisiert den Maus-Cursor mit den Daten, die in "V_MouseBuffer"
gespeichert sind.
PROCEDURE V_ShowMouse;
Zeigt den Maus-Zeiger
PROCEDURE V_HideMouse;
Versteckt den Mauszeiger
PROCEDURE V_MousePos(VAR x,y:Word);
Ergibt die akt. Maus-Cursor Position.
FUNCTION V_LKey:Boolean;
TRUE, wenn linke Maus-Taste betätigt wird.
FUNCTION V_RKey:Boolean;
TRUE, wenn rechte Maus-Taste betätigt wird.
FUNCTION V_MouseInBox(x1,y1,x2,y2:Word):Boolean;
TRUE, wenn Maus-Cursor in Bereich von x1,y1 bis x2,y2.
PROCEDURE V_SetHorRange(Min,Max:Word);
Setzt horizontale Maus-Cursor-Grenzen.
PROCEDURE V_SetVertRange(Min,Max:Word);
Setzt vertikale Maus-Cursor-Granzen.
PROCEDURE V_SetMickeyRatio(xm,ym:Word);
Setzt Maus-Geschwindigkeit in X und Y-Richtung.
VChr20 und VChr24:
Variablen:
FontPath:String; Font-Datei-Pfad (Bsp: C:\, d:\test\)
Wenn Font nicht in akt. Verzeichnis,
dann muß hier der Pfad-Name stehen.
( BackSlash "\" am Ende !!!!!!!!! )
FontName:String; Font-Datei-Name, muß angegeben werden,
wenn ein Font geladen wird.
Bei Font 0 wird IBM.CHR geladen.
Font 1 braucht keine Datei.
Transparent:Boolean; wenn TRUE, dann wird bei PixelFonts
kein Hintergrund gezeichnet. Die
Schrift ist also transparent.
Kann jederzeit geändert werden.
PROCEDURE SetTextStyle(Font,Direction: Word; CharSize:Word);
Setzt aktuelle SchriftArt und lädt ggf. den Font in den
ArbeitsSpeicher (z.B. Font 0).
"Font" gibt die FontNummer an.
Die anderen Parameter haben noch keine Bedeutung.
Am Besten, sie Übergeben dort 0, alse z.B.
SetTextStyle(0,0,0) oder (1,0,0).
Z.z. gibt es nur 3 Fonts, 0,1 und 2.
Diese sind PixelFonts unterschiedlicher Größe:
Font 0 : 8x16 Pixel pro Zeichen
Font 1 : 8x8 Pixel pro Zeichen
PROCEDURE DelTextStyle(Font:Word);
Vor Programm-Ende sollten die gesetzten Zeichensätze mit "DelTextStyle"
beendet werden. Hier wird ggf. der Zeichensatz aus den Speicher entfernt.
In "Font" wird die Font-Nr. übergeben.
FUNCTION TextHeight(TextString:String):Word;
Ergibt die Höhe der Zeichen in "TextString" in Pixel
für den akt. Zeichensatz.
FUNCTION TextWidth(TextString:String):Word;
Ergibt die Breite des TextStrings in Pixel für den akt. Zeichensatz.
PROCEDURE GrWriteChar(x,y:Word; c:Char);
Zeichnet das Zeichen in der Variablen "c" an der Stelle "x,y".
PROCEDURE GrWrite(Text:String);
Schreibt einen Text in der Stelle des momentanen TextCursors.
PROCEDURE GrWriteLn(Text:String);
Schreibt einen Text in der Stelle des momentanen TextCursors
und setzt den Cursor an den Anfang der nächsten Zeile.
PROCEDURE GrGoToXY(x,y:Word);
Setzt den TextCursor an die Stelle x,y
Zu Beachten ist, das eine Cursorstelle die Breite eines Zeichens
des akt. Zeichensatzen besitzt.
Bei Font 0 ergibt "GrGoToXY(3,4)" die Grafik-Koordinaten 48,32,
da ein Zeichen dort 16 Pixel breit und 8 Pixel hoch ist.
FUNCTION WhereX:Word;
Ergibt die akt. TextCursor-X-Position.
FUNCTION WhereY:Word;
Ergibt die akt. TextCursor-Y-Position.
PROCEDURE GrTextColor(Color:Byte);
Setzt Zeichen-Farbe für Textausgabe.
PROCEDURE GrTextBackGround(Color:Byte);
Setzt Hintergrundfarbe für Textausgabe,
ist nur relevant, wenn die Konstante "Transparent" FALSE ist.
FUNCTION GrGetTextColor:Byte;
Ergibt aktuelle Zeichen-Farbe für Textausgabe.
FUNCTION GrGetTextBackGround:Byte;
Ergibt aktuelle Hintergrundfarbe für Textausgabe
PROCEDURE OutTextXY(x,y:Word;TextString:String);
Gibt einen TextString an der Pixel-Position x,y aus.
PROCEDURE OutText(TextString:String);
Gibt einen TextString an der aktuellen Grafik-Cursor-Position aus.
(Nicht zu verwechseln mit dem TextCursor)
PROCEDURE GrWriteShadow(Text:String; dist:Byte; Color, ShadowColor:Byte);
Gibt einen Text mit Hintergrund-Schatten aus an der akt.
Text-CursorPosition.
"Dist" gibt einen Abstand an, an dem der Schatten liegt. (z.B. 1..4)
"Color" ist die Textfarbe, "ShadowColor" ist die Farbe des Schattens.
FUNCTION GrReadStr(NumChars:Byte):String;
Liest einen String ein. Die Anzahl der möglichen Stellen wird
mit "NumChars" übergeben.
VTools20 und VTools24:
Konstanten:
AnzFarben=256; Anzahl der max. gleichzeitig
darstellbaren Farben
DatenTypen:
PaletteType=Array[0..(AnzFarben*3)-1] OF Byte;
In einer Variable dieses Typs
kann eine Farbpalette gespeichert
werden.
Es stehen pro FarbAnteil für
Rot, Grün, Blau 256 Bytes zur
Verfügung. Die ersten 256 Bytes
stehen also Rot zur Verfügung,
die nächsten Grün und die letzten
256 sind für Blau.
PROCEDURE LoadPicture(Name:String; x,y:Word; VAR Error:Integer);
Liest ein Bild "Name" und zeichnet es an der Stelle "x,y"
auf den aktuellen Bildschirm.
Ist Error<>0 dann ist ein Fehler unterlaufen.
Die Error-Code sind die gleichen wir die von "IOResult".
PROCEDURE LoadPalette(Name:String; VAR Error:Integer);
Liest eine Farbpalette "Name" in den internen Paletten-Speicher.
Ist Error<>0 dann ist ein Fehler unterlaufen.
PROCEDURE InitPalette;
Gibt die Farb-Paletteninformationen des internen Paletten-Speichers
an die VGA-Karte weiter und setzt diese Palette.
PROCEDURE ShowPalette(VAR Palette:PaletteType);
Gibt die Farb-Paletteninformationen der übergeben Variable
an die VGA-Karte weiter und setzt diese Palette.
PROCEDURE GetPalette(VAR Palette:PaletteType);
Speichert die aktuelle Farb-Palette der VGA-Karte in die
übergebene Variable.
PROCEDURE SoftPalette(Shades:Byte);
Macht aus einem dunklen Bildschirm in "Shades" Schritten die
Farbe hinein.
Hiermit wird ein sog. Aufblenden des Bildschirms ermöglicht.
Der Bildschirm sollte vorher mit "PaletteDark(0)" auf schwarz
gestellt werden (Sofern die Farbe 0 schwarz ist).
PROCEDURE PaletteDark(Color:Byte);
Stellt die VGA-Farbpalette auf eine Farbe "Color" um.
Berührt nicht den internen Palettenspeicher.
Nur für VTools24:
PROCEDURE LoadPicture320_240(NamePic,NamePal:String; VAR Error:Integer);
Liest ein Bild mit der dazugehörigen Palette, deren Namen
übergeben werden und stellt das Bild auf dem Bildschirm dar.
Das Bild wird dabei in allen 3 Bildschirm-Speicher geladen,
was besondere Bedeutung bei den SPRITE-Routinen besitzt.
SPRITE-Routinen:
BWSprite:
Konstanten:
MaxSprites=255 Maximale Anzahl von Sprites
Transparent :Byte =0 Tranparente Farbe für Sprites.
Sollte 0 sein, kann aber geändert werden.
NumSprites :Byte =MaxSprites; Aktuelle Anzahl der benutzten Sprites.
PROCEDURE ActPages
Muß regelmäßig aufgerufen werden. Hier werden die von den
Spritebefehlen geforderten Grafiken aktualisiert.
PROCEDURE LoadSprite(Name:String; Nr:Byte);
Lädt den Sprite "Name" unter die Spritenummer "Nr" in
des Hauptspeicher des Rechners (in den HEAP).
PROCEDURE DelSpriteBuffer(Nr:Byte);
Entfernt den Sprite "Nr" und gibt den Speicherplatz wieder
frei.
PROCEDURE StartSprite(x,y:Word; Nr,Level:Byte);
Startet einen geladen Sprite an der Stelle "x,y".
"Nr" ist die Spritenummer die gestartet werden soll.
"Level" gibt die Spritepriorität an, die bestimmt,
welcher Sprite bei einer Überlagerung oben oder
darunter erscheint.
(Dazu gilt: Je größer der Wert, desto höher die Priorität.
Der Sprite mit der höchsten Priorität liegt immer oben.)
Aktivität erst bei "ActPages". "ActPages" sollte nach
diesem Befehl 2x hintereinander erfolgen.
PROCEDURE StopSprite(Nr:Byte);
Entfernt den Sprite "Nr" von Bildschirm.
Auch hier bitte 2x ActPages.
?PROCEDURE SpriteLevel(NewLevel:Byte; Nr:Byte);
Setzt eine neue Spritepriorität "NewLevel" des
Sprites "Nr".
PROCEDURE MoveSprite(x,y:Word; Nr:Byte);
Bewegt den Sprite "Nr" zur Position (x,y).
Ausführung erfolgt durch 1x "ActPages".
FUNCTION SpriteCollisionEasy(Nr1, Nr2:Byte):Boolean;
Wenn 2 Sprites der Nummern "Nr1,Nr2" übereinander
liegen (hier reicht das Rechteck der Spritedefinition
aus Höhe und Breite), dann TRUE.
FUNCTION SpriteCollision(Nr1, Nr2:Byte):Boolean;
Wenn 2 Sprites "Nr1,Nr2" sich mit gesetzen Pixeln berühren,
dann TRUE. Etwas langsamer als "...Easy()", da mehr
Berechnungen.
Animation :
Konstanten:
MaxAnimationen=20 Maximale Anzahl der Animationen.
MaxAnimationSprites=255 Maximale Anzahl der Sprites pro Animation.
PROCEDURE InitAnimation(Nr:Byte; SpritePos:Byte; Num:Byte; Name:String; Level:Byte);
Initialisiert die Animation "Nr" im Spritebereich "SpritePos".
"Num" erhält die Anzahl der geladenen Sprites, während "Name"
der Sprite-Dateiname ist. "Level" gibt die Priorität des Sprites
an. Der Dateiname muß eine fortlaufende Nummer beinhalten und
die Endung ".Spr" besitzen. (Siehe Demo-Prg.)
PROCEDURE DelAnimation(Nr:Byte);
Entfernt eine Animation "Nr" aus dem Speicher.
PROCEDURE StartAnimation(x,y:Word; Start,Stop:Byte; Nr:Byte);
Start eine geladene Animation "Nr" an der Stelle "x,y".
"Start" und "Stop" geben die SpriteNummern an, die
zyklisch beim Ablaufen von "ActPages" dargestellt werden.
Diese Werte können mit "NewAnimationData" geändert werden.
(2x ActPages !)
PROCEDURE StopAnimation(Nr:Byte);
Stoppt die Animation und entfernt sie beim nächsten "ActPages" von
Bildschirm.
(2x ActPages !)
PROCEDURE MoveAnimation(x,y:Word; Nr:Byte);
Versetzt die Animation "Nr" nach "x,y", wobei der Spriteablauf
gesteuert wird (das nächste Sprite wird gezeichnet.)
PROCEDURE NewAnimationData(Start,Stop:Byte; Nr:Byte);
Setzt neue Werte für den zyklischen Ablauf der Sprite in
der Animation "Nr".
Die Softwaretools
GetPicture "GetPic.Exe"
Parameter: /h :Hilfe
GetPicture ist ein residentes (TSR-) Programm, welches ermöglicht
aus (Mal-)Programmen eine Bildschirmkopie anzufertigen.
Wichtig für vernüftige Ergebnisse ist, das das Programm den
VGA-Modus 320x200x256 benutzt.
Durch Betätigen der Tastenkombination (ALT)-(F6) wird der
Bildschirminhalt in einem Daten-Puffer im Hauptspeicher gesichert.
Mit dem Programm "PicTool" können Sie das Bild (oder einen Ausschnitt davon)
in eine Datei speichern.
GetPic erzeugt beim Start eine Datei "GetPic.Dat".
PicTool "PicTool.Exe"
Parameter: /h :Hilfe /c :mit Farbe
Pictool bietet folgende Menü-Auswahl:
1-Bild ansehen
(muß entweder vorher geladen worden sein oder
mit Punkt "7" von GetPic geholt werden.)
2-Bild speichen (als .PIC)
3-Ausschnitt speichern
1-Ausschnitt wählen
Sie wählen ein BildAusschnitt, indem Sie
ein Rechteck steuern. Das Recheck selbst gehört
zum Ausschnitt.
Mit (+,-) ändern Sie die Schritt-Weite, während
Sie mit den Pfeiltasten dieses steuern.
Weitere Infos entnehmen Sie bitte dem Programm.
2-gewählten Ausschnitt speichern (.PIC)
3-gewählten Ausschnitt als Sprite-Datei speichern (.SPR)
4-Bild laden (.PIC)
5-Farbpalette speichern (.PAL) (NICHT VERGESSEN !!)
6-Farbpalette laden (.PAL)
7-Daten von GetPic holen.
Die Bild-Daten werden aus dem Bild-Puffer von GetPic
in den von PicTool kopiert.
Dieser Vorgang sollte zuerst angewendet werden, wenn ein
von GetPic gespeichertes Bild bearbeitet werden soll.
SpriteEditor "SpriteEd.Exe"
Parameter: /h :Hilfe
/Gn :Größe eines Zeichenfeldes in Pixel.
Werte für n : 1..5, 5=default.
Einfach mal Ausprobieren.... (Bsp: /G3)
/Nn :Vordefiniere Größen der Arbeitsfläche.
Werte für n : 1,2,3
1=40x35 2=62x50 3=76x66
Einfach mal Ausprobieren.... (Bsp: /N3)
Der Sprite-Editor läuft im VGA-Modus 320x240x256.
Er wurde mit den schon genannten UNITs entwickelt.
Befehle:
F1 -Hilfe (Hier sind alle Befehle aufgelistet)
L -Sprite Laden
S -Sprite Speichern
1..4 -Laden von Referenz-Sprites in den vorgezeichneten Kästchen.
Sinnvoll für das Zeichnen von Animationen, da man beim
Zeichnen andere Sprites sehen kann.
Pfeiltasten-Sprite um 1 Pixel verschieben
C -Sprite löschen. Neue HintergrundFarbe ist die akt. ZeichenFarbe
G -Spritegröße ändern durch Angabe von Höhe und Breite.
H -Definition der "Transparenten" Farbe des Sprites ändern
(sollte Paletteneintrag 0=schwarz bleiben)
U -Sprite vertikal spiegeln
I -Sprite Horizontal spiegeln
P -Palette laden
+/- -Farbwert der akt. Zeichenfarbe um 1 verändern.
ESC -Programm verlassen.
Befehle der Animation:
WICHTIG: Animationen bestehen aus einem oder mehreren Sprites.
Sie müssen alle den selben Namen gefolgt von ihrer Ablaufnummer
und die Endung ".SPR" besitzen.
Bsp: SPRITE1.SPR SPRITE2.SPR SPRITE3.SPR .... SPRITE13.SPR usw.
D -Definition der Animation
Bitte Sprite-Name und Anzahl der Sprites angeben.
Bsp: SPRITE und 13
A -Animation testen (ACHTUNG: Bitte erst DEFINIEREN)
Pfeiltasten :Sprite bewegen
Page UP/DOWN :"Wait"-Wert um 10 verändern.
Verzögerungswert zwischen den Sprite-
Bewegungen.
BITTE AUSPROBIEREN BEI FLIMMERNDEN SPRITES.
BEI SCHNELLEN RECHNERN KANN DIESER EFFEKT
AUFTAUCHEN. WARSCHEINLICH EIN FEHLER
IN DER BILDAUFBAU-SYNCHRONISATION.
EIN "WAIT" VON 20 WIRKT WUNDER !!!!!!!!
Home :Setzt Wait-Wert auf 0.
+/- :Andert die Schrittweite der Bewegungen
in Pixel. Wenn der Wert=0, dann verändert
sich die Animations-Position nicht.
V :Warten auf Vertikale Synchronisation EIN/AUS
Bei AUS sind die Sprites schneller, filmmern
aber.
Bemerkungen/Empfehlungen:
In den mitgelieferten Software-Tools haben Sie sich schnell
eingearbeitet. Sie sollten ein bischen damit exprimentieren.
Benutzen Sie für Bilder die Endung .PIC, für Sprite .SPR
und für Paletten .PAL.
NEU !!!!
Die UNIT BWSprit2 (-->2!) ist aufgrund eines anderen Systems viel schneller
als die UNIT BWSprite. Hier werden die Sprite-Prioritäten über die
Farbpalette abgewickelt.
Dazu existiert ein ARRAY "Level[1..NumColors] OF Byte", in dem
für jeden Paletteneintrag eine SpritePriorität eingetragen werden kann.
Dazu gilt: Je größer der Wert, desto höher die Priorität.
Der Sprite mit der höchsten Priorität liegt immer oben.
Die Alten "Level-Parameter" in den Sprite-Routinen sind also
inaktiv, werden aber aus kompatibilitätsgründen beibehalten.
NEU !!!!
*** Ein Tip : ***
Wenn sie in einer schon ablaufenden Szene neue Sprite aufrufen wollen,
dann machen Sie es wie folgt:
1) Ladem Sie alle benötigten Sprites in den Speicher.
2) Starten Sie alle Sprites (2x ActPages !).
Den Sprites, die noch nicht erscheinen sollen, geben
Sie eine Bildschirm-Koordinate von >(320,200) z.B. (1000,1000).
Dann erscheinen Sie nicht.
Werden diese Sprite dann benötigt, werden sie mit "MoveSprite"
an die gewünschte Position gebracht.
3) Lassen Sie ein Sprite einfach durch "MoveSprite" verschwinden,
indem Sie eine Koordinate von (1000,1000) angeben.
Das gleiche gilt auch für Animationen !!
FÜR SONSTIGE TIPS SEHEH SIE SICH DIE DEMONTRATIONS-SOFTWARE AN !
Pascal-Programm-Source:
Falls Sie Interesse an den Sourcen zeigen, hier einige Zeilen dazu:
Ich werde die Sourcen nicht großartig ändern. Es können also
durchaus PROCEDURE-Leichen { oder auskommentierte ältere
Programm-Leichen und Debug-Routinen (->leicht zu finden)} vorkommen.
Diese sind aber in meinen Augen nicht störend, sondern im Gegenteil
teilweise gut zum Programmverständnis, da man oft bei neuen, optimierten
Routinen längere Zeit benötigt, um diese zu durchschauen.
Dort, wo Kommentar nötig ist, steht er auch.
Der Source ist größtenteils nach folgendem Beispiel formatiert
(also sehr übersichtlich)
PROCEDURE Beispiel;
VAR Test:Real;
BEGIN
WriteLn(..);
IF KeyPressed THEN GoToXY(..);
REPEAT
...
UNTIL...
END;
Die Sourcen für das Datei-Auswahl-Fenster in PICTOOL und für
die TSR-Steuerung in GETPIC (beides TPUs) können z.Z. nicht
mitgeliefert werden.