Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - D2O

#121
Hi,
hier muss ich mal etwas platz machen und luft hohlen.
Manchmal Denke ich im moment hier sind ein paar dem Kindergarten entsprungen.
Wenn einer mal einer anderen meinung ist wird man gleich von anderen Member angepisst.

Sorry nun für das Öffentliche:

Mal zu Dir Schanz0r.
Bei Dir weis ich nicht genau was ich von Dir Denken soll???
Zum einen klatscht Du immer wieder nette Codebeispiele raus und bist hilfsbereit,
zum andern machst Du neue Member an bzw, bist sowas von unfreundlich (Wenn mir einer so im Reallife kommen würde, hätter der links und rechts
erst mal ne watsche bekommen)
Was mir noch negative aufgefallen ist, Du greifst andern beim Antworten vor.
Wenn einer mal was Kritisiert/wünscht , kommt nicht selten vor das Du Gernot beim Antworten vorgreifst, z.B
mit :
Gibst nicht wird Gernot nicht einbauen, braucht man nicht.....??? Und ? Trotzdem hat Gernot anders reagiert!

Überdenk mal Deine einstellung!

(Das soll jetzt kein Anschiss werden sondern Konstruktive Kritik)

@der Rest, man muss auch mal über den Tellerand schauen nur so lernt man weiter.
Was das Vergleichen anderer sprachen angeht, das ist einfach normal, aber eben aus sowas kann man lernen und auch
vieleicht die eine oder andere Idee(function) abkupfern, verbessern, mit einbauen....usw.


Wir sind im moment einfach noch eine Relative kleine Community und sollte neuankömmlinge etwas freundlicher und mit Respect behandeln,
nicht das er gleich wieder flüchtet.
Das soll aber auch nicht heisen das man sinnlos rumspamen darf.

OK, mal schauen was Die anderen so sagen bzw. denken.
#122
Hmm, hab ich was verpasst??
Ich finde die Funktion " Hilfe erzeugen " in der IDE nicht mehr.

Ach, und wie immer wieder, Super Update :)
#123
Hi,
wäre es möglich ein GLB SDK zu entwickeln?

Die Idee kamm mir als ich das hier las, http://www.blitzforum.de/forum/viewtopic.php?t=23965.
Das BRL nun ihre B3D "DX7" engine probiert nochmals zu verjubeln, find ich doch etwas hart.
Aber die Idee ansich finde ich gut.
Wäre es hier eben nicht möglich ein GLB 3D SDK zu erstellen und hier PureBasic oder Blitzmax Kunden zu verkaufen?
#124
Hi, mir ist erst heute aufgefallen das im vergleich zu den Anderen
meine "Signatur höhe" grösser ist.
Ich hab im Profil nachgeschaut ob da irgendwie leerzeilen drin sind, aber nada.

Hab ich da was bei den einstellungen übersehen??
#125
Hi,
ich spiele mit dem Gedanken eine GP2X zuzulegen, bzw. meine Frau liebäugelt mit einem Gameboy Advance für den Urlaub,
die Kinder sollen damit auch zurecht kommen.
Nun gut,
ich möchte einfach mal eure erfahrungen über den GP2X haben.
So wie ich es herausgelesn habe, wird der mit 2 Batterien gefüttert, hmmm, wie ist da die laufzeit fürs Spielen/Video ?
Gibts hier gute Spiele, vergleichbar mit GBA oder vieleicht sogar DS ? (Ich weis, selber machen :) )
Wie ist der Bildschirm, sieht man da auch was ;), meine, ist der kontrast, Bildauflösung.. usw gut ?
Wie ist die Benutzung, einfach oder muss man hier schon ne'n Führerschein machen ?
Naja, blabbert einfach mal drauf los.


Edit://,hmm hat das Ding auch Kopfhöhrer anschluss, konnte unter GP2X.de nichts finden?
Edit2:// Habs gefunden, er hat ne 3,5klinke. DerSound soll aber nicht so berauschend sein :(
#126
Hi,
ich wollte eben mit dem Befehl "Filerequest" etwas spielen aber habe hier so mein Problem mit dem Speichern.
Ich kann eine Datei öffnen aber eben nicht anlegen.
Das "Speichern unter" Fenster öffnet sich und ich kann hier den dateinamen eintragen, die Pfad angaben werden auch an a$ richtig übergeben
 aber wenn ich in den Speicher Ordner schaue, nada :(
Hier mal ein Simpler Code:

Code (glbasic) Select
a$ = FILEREQUEST$(FALSE, "Text|*.txt|All|*.*")

PRINT a$,10,10
SHOWSCREEN
KEYWAIT

a$ = FILEREQUEST$(TRUE, "Text|*.txt|All|*.*")


PRINT a$,10,10
SHOWSCREEN
KEYWAIT
und dann noch ne kleine Frage,
kann man diesen Befehl auch unter Linux nutzen und wie schaut es
ds mit den Schreib und lese rechten aus?
#127
Hi, hatte heute mal etwas zeit und hab mal wieder in paar Codezeilen geschrieben.

Ich weis das es schon Programme gibt wo man die Cachedateien in "richtige" ut dateien umschreiben kann.

Nun gut, es ist ein simples und einfaches Tool aber es funktioniert :)

http://www.deuteriumoxid.com/bb/{BB}D2O-Cachemanager.rar

Das verzeichnis entpacken und in den UT2004 Ordner kopieren.
Darin sind zwei exe dateien, einmal {BB}D2O-Cachemanager.exe und dann noch
{BB}D2O-Cachemanager-Killfile.exe.

Die erste exe liest die Cache.ini aus und kopiert mit dem richtigen namen die dateien in den output Ordner.
Hier gibts die System, Textures... und soweiter.
Es wird nichts an den Original Dateien geändert.
Von dort aus kann man dann selber die Dateien
in die jeweiligen Orginal Ordner Kopieren.

Die zweite exe macht das genauso nur werden dann aber die kopierten dateien im Cache Ordner gelöscht.

Bei mir hat das mit 2,6GB ca. 5min gedauert, ohne Text ausgabe wärs noch schneller, aber ich Denke das reicht.

Wie es immer so ist, man macht voher immer eine Sichrungskopie ;)

die Bilder und der Sound im bbsys Ordner können auch ausgetauscht werden, nur muss der Dateiname und das format beibehalten werden.

Würd mich über feedback und kräftiges testen
freuen.
Gruss,
Slayer "D²O"
#128
Hi, Danke Gernot für F10 und co. :)

Quote from: "Slayer"Leider werden die Funktionen der Taste nicht sehr genau beschrieben aber das mach ich mal jetzt.

Wenn man im Code mit F9 einen Debugstop setzt und das Programm im Debug Modus startet, bleib es in dieser Zeile stehen,
nun kann man mit F10 die Zeilen einzeln ab arbeiten und im DebugTab der IDE die Globalen und localen werte überprüfen.

Benutzt man die kombination STRG+F10, kann man auch in eine Function springen und dort die einzelnen Zeilen beobachten,
nur mit F10 alleine geht das nicht.
Hier wird dann nur zeile in der die Function steht als gesamtes abgearbeitet.

Und mit Shift+F10 kann man aus dieser Function wieder heraus springen.
Finde dieses Feature TOP und auch sehr wichtig .

#129
Hi, auf basis von Schanz0r's beispiel, habe ich jetzt mal einen SchussType/Function erstellt.

Ziel ist es Functionen zuerstellen die man als Templates benutzen kann, man muss ja nicht immer das Rad neu erfinden ;)
Auch sollen ansich sowenig bis garkeine Globalen Variablen darin auftauchen, so das ein Fremder die function einfach aufrufen kann
ohne gefahr zu laufen überschneidungen mit seinen eigenen Variablen zu haben.

Ok, mein Problem ist nun das die function nur einmal aufgerufen werden kann, da ich intern STATIC benutze und es eben hier
intern Variablen/Wert überschneidungen gibt.

Hier mal der Code:
Code (glbasic) Select
// --------------------------------- //
// Project: Particles
// Start: Friday, April 06, 2007
// IDE Version: 4.1da



FILLRECT 0,0,11,11, RGB(0xff, 0x00, 0x80)
DRAWLINE 0,5,10,5,RGB(0xff, 0x00, 0x00)
DRAWLINE 5,0,5,10,RGB(0xff, 0x00, 0x00)
GRABSPRITE 2,0,0,11,11


LOADSPRITE "Particles.png",1






WHILE TRUE
MOUSESTATE mx,my,b1,b2


// Auslöser, Bildindexnummer, anzahl der Particle, Delay in millisecunden
 p_particleshot(b1,1,3,100)

 

SPRITE 2,mx,my


PRINT getfps(),0,30
SHOWSCREEN
WEND
END


//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------

FUNCTION p_particleshot:l_in,l_sprite,l_count,l_time

LOCAL l_shottime
STATIC s_time,s_temp

s_time = GETTIMERALL()

IF (s_time-s_temp) > l_time
s_temp = s_time
l_shottime = 1
ENDIF
STATIC s_counter = 0
STATIC   P AS Particle
STATIC  Particles[] AS Particle

IF l_in = 1   AND s_counter < l_count AND l_shottime = 1 // Partikel Array erzeugen
INC s_counter,1
P.x = mx
P.y = my//+RND(8)
DIMPUSH Particles[], P
ENDIF


IF l_in = 0 THEN  s_counter = 0

FOREACH Check IN Particles[]
DEC Check.y,3//RND(5)
// DEC Check.x, 3
SPRITE l_sprite, Check.x, Check.y
IF Check.x < 0 OR Check.y < 0 THEN DELETE Check
NEXT

PRINT s_counter,100,10
PRINT "Particles: "+BOUNDS(Particles[],0),100,30
PRINT l_in,100,50



ENDFUNCTION




TYPE Particle
x
y
ENDTYPE





FUNCTION getfps:

STATIC fps_time,fps_counter,fps,fps_temp
fps_time = GETTIMERALL()
fps_counter = fps_counter + 1
IF (fps_time-fps_temp)>1000
fps_temp = fps_time
fps = fps_counter
fps_counter = 0
ENDIF

RETURN fps
ENDFUNCTION
#130
GLBasic - en / JDedit :) WIP
2007-Apr-01
Hi all,
this is my first realy Project in GLB.
It is a Editor for my next Project, JD... Jump and Run game.

Sorry for my bad English :)
Beta Status.

 Screen:


and Download:
http://www.deuteriumoxid.com/glbasic/JDedit_v3.rar
#131
Hi,
ich war gestern mit Schranz0r kurz im Chat, macht übrigens echt spass :) , und da kam das Thema Sound auf.
Nun mit Sound's hab ich noch garnichts in GLB gemacht, das ist aber der nächste schritt von mir, so habe ich mal
probiert wies es bei mir geht.
Hmmm, nada :(

Ich habe mal den Code aus den Tutorial genommen, den Sound gibts im Ordner "Sample", und ausprobiert,
aber nichts geht, er überspring die While schleife geht sorfort auf das Print mit "Stop..."
Auch einen eigenen Sound, 16bit Stereo 44Khz PCM Wave, wird nicht abgespielt :(
In der Wiedergabe Steuerung ist Wave Active.


Code (glbasic) Select
LOADSOUND "Ring.wav",0,1

ch = PLAYSOUND(0, 0.0,1.0)
WHILE SOUNDPLAYING(ch)
   PRINT "Playing...", 100,100
   PRINT ch, 100,120
    SHOWSCREEN
WEND
PRINT "Stop!", 100, 100
SHOWSCREEN
MOUSEWAIT
Ogg :) ist free und ohne Licenzkosten
#132
Hi,
jetzt möchte ich endlich auch mal was zum Testen anbieten, auch wenns nur ne Alphaversion ist.

Es ist/wird ein Editor den ich für mein JuR Idee nutzen möchte.
Die Userbyliti ist noch nicht so schön, aber er funktioniert schon mal :)
Er ist auch noch recht starr, hier muss ich noch viel ändern/hinzufügen :(

Die Grauen leisten rechts und unten sind Platzhalter für anzeigen, einstellungen..usw..
Man kan schonmal map laden und speichern, natürlich auch bearbeiten.

F1 =  Screenshot
L = Mapladen
S = Mapspeichern
+ = Tile nachoben
- = Tile nach unten
Cursur = Scrolling

1-5 = einzelne Layer bearbeiten
6 = Alle Layer zeigen.
Linke Mousetaste = zeichnen
Rechte Mousetaste = Löschen



Dann auch mal ne bitte, die 2 Graphiken werden bei mir nicht richtig angezeigt, damit meine ich die Tranzparenzfarbe.
Die haben bei mir einen schwarzen hintergrund.
Bitte mal die Bilder testen

Edit//: Das mit den Bildern ist mein Fehler, wird in der nächsten version behoben :)

Hier mal ein screenshot:


Download:
http://www.deuteriumoxid.com/glbasic/JDedit_alpha.rar
#133
Hi,
ich weis nicht ob das schon bekannt ist, aber gestern ist einem Arbeitskollegen was lustiges aufgefallen.

Öffnet mal ein Video, bei mir hats mit PowerDVD und WindowsMediaPlayer geklapt, drückt die Druck Taste auf dem Keybord.
Öffnet Paint und drückt STRG+V , Einfügen.

Nun hat man das Video das läuft in Paint, man kann drüber malen, ausschneiden usw...

Find's ganz lustig :)
#134
Hi,
ich generiere, wenn beim start des Programs die game.ini datei nicht vorhanden ist, eine game.ini.
In der stehen die daten für setscreen und limitfps.

Ich möchte das ganze aber so machen das auch ein Ordner "system" angelgt wird in dem die .ini steht wenn der
Ordner nicht vorhanden ist.

Hier wäre ein "CreateDir$" nicht schlecht.

Hier mal mein Code mit Beispiel:

Code (glbasic) Select
//------------------------------------------------
GLOBAL win AS Tgraphics
win = graphics()

 //Beispiel:
WHILE TRUE
PRINT "hallo",10,10
PRINT win.x,10,20
PRINT win.y,10,30
PRINT win.mode,10,40
PRINT win.fps,10,50

SHOWSCREEN
WEND
//

FUNCTION graphics AS Tgraphics:
LOCAL file
LOCAL l_win$
l_win$  = "window"

LOCAL temp AS Tgraphics


file = DOESFILEEXIST("game.ini")
temp.file = file

IF file = FALSE
INIOPEN "game.ini"
INIPUT l_win$,"winx",800
INIPUT l_win$,"winy",600
INIPUT l_win$,"winmode",0
INIPUT l_win$,"frame",100
INIOPEN ""

INIOPEN "game.ini"
temp.x = INTEGER( INIGET$(l_win$,"winx") )
temp.y = INTEGER( INIGET$(l_win$,"winy") )
temp.mode = INTEGER( INIGET$(l_win$,"winmode") )
temp.fps = INTEGER( INIGET$(l_win$,"frame") )

INIOPEN ""
SETSCREEN temp.x,temp.y,temp.mode
LIMITFPS  temp.fps
ELSE
INIOPEN "game.ini"
temp.x = INTEGER( INIGET$(l_win$,"winx") )
temp.y = INTEGER( INIGET$(l_win$,"winy") )
temp.mode = INTEGER( INIGET$(l_win$,"winmode") )
temp.fps = INTEGER( INIGET$(l_win$,"frame") )

INIOPEN ""
SETSCREEN temp.x,temp.y,temp.mode
LIMITFPS  temp.fps
ENDIF


RETURN temp
ENDFUNCTION


TYPE Tgraphics
x
y
mode
fps
file

ENDTYPE
#135
Sorry for my bad English ;)

Download this Graphics:
http://www.deuteriumoxid.com/glbasic/tile.bmp
http://www.deuteriumoxid.com/glbasic/tile2.png

Edit: Oops, i forget this, FILLRECT 0,0,l_tilex,l_tiley,RGB(255,0,128).
Fixit.

Code (glbasic) Select
// --------------------------------- //
// Project: loadimagev6
// Start: Saturday, March 10, 2007
// IDE Version: 4.114

// Code example :

GLOBAL player1 AS Tsprite
GLOBAL player2 AS Tsprite


player1= loadimage("tile.bmp",32,32,18)
player2 = loadimage("tile2.png",128,64,18)
//
GLOBAL a
WHILE TRUE

IF a > 17 THEN a = 0
SPRITE player1.pic[a],0,0
SPRITE player2.pic[a],100,100

SHOWSCREEN

MOUSEWAIT
INC a,1
WEND
/////////// Code example End


//--------------------------------loadimage---------------------------
// file Path, tile wight, tile high, tile pay down

FUNCTION loadimage AS Tsprite:l_path$,l_tilex,l_tiley,l_anzahl
    STATIC s_counter = 1000  //Ab 1000 damit überschneidungen mit loadsprite nicht vorkommen

        //-------------
    LOCAL l_x,l_y  // zum berechnen der Tile anzahl aus der Image grösse
    LOCAL  l_xcount,l_ycount // Counter für die Positions verschiebung
    LOCAL imagetemp // für die aufnahme des Tilsets
    LOCAL image AS Tsprite //für die aufnahme der Tiles
    LOCAL l_showload // Variablen für Ladebalken
    LOCAL l_prozent
    l_showload = 100/l_anzahl

    image.tilex = l_tilex
    image.tiley = l_tiley
    image.frame = l_anzahl -1


    LOCAL l_posx,l_posy     // Variablien für Grundposition auf die sich die Verschiebung berechnet| x = 0 | y = 0
    LOCAL l_i                 // für die for schleife
    LOCAL countertemp


        REDIM image.pic[l_anzahl]

            countertemp = s_counter    //Index Temporär speichen um später den Speicher wieder freizu geben
            LOADSPRITE l_path$,countertemp //image laden
            GETSPRITESIZE countertemp,l_x,l_y    //Image grösse ermitteln

                l_x = INTEGER(l_x/l_tilex)
                l_y = INTEGER(l_y/l_tiley)



                     LOADSPRITE l_path$,countertemp
                         INC s_counter,1  //index um 1 erhöhen


            FOR l_i = 0 TO l_anzahl-1

                    IF l_xcount < l_x
                            l_posx = (-l_tilex*l_xcount)
                            ELSE
                                l_xcount = 0
                                l_posx = (-l_tilex*l_xcount)
                                INC l_ycount,1
                    ENDIF

                    IF l_ycount < l_y
                            l_posy = (-l_tiley*l_ycount)
                            ELSE
                                INC l_ycount,1
                                l_posy = (-l_tiley*l_ycount)
                    ENDIF
                    FILLRECT 0,0,l_tilex,l_tiley,RGB(255,0,128) ///<<<<<<<< FIX :)
                    SPRITE countertemp,l_posx,l_posy
                    GRABSPRITE s_counter,0,0,l_tilex,l_tiley
                    BLACKSCREEN
                   
                    ///Ladebalken---------------
                    INC l_prozent,l_showload
                    PRINT INTEGER(l_prozent)+"% geladen",100+l_prozent,480
                    FILLRECT 100,500,100+l_prozent,500+10,RGB(20,200,20)
                    ///-----------------------------
                    SHOWSCREEN //__________________________________________
                   

                        image.pic[l_i] = s_counter
                    INC l_xcount,1
                    INC s_counter,1
            NEXT

                LOADSPRITE "",countertemp  //Speichfreigenen

                RETURN image

ENDFUNCTION




// Dieser Type wir gebraucht um aus der function loadimage ein array als rückgabe wert zu nutzen
// er könnte auch für die bild positionen usw. erweitert werden
TYPE Tsprite
pic[]
x //positionen
y
tilex // Tilegrösse
tiley
frame //anzahl der frames
ENDTYPE
#136
Hi, ich bin grade dabei mir einen maploader zu schreiben,
dabei ist mir aufgefallen das, auch wenn ich die Variable "l_file$" als String deklariert habe,
ich auch bei benutzung das $ braucht.
Ich dacht das wäre dann automatisch.

Es ja kein Beinbruch, ist mir nur eben erst aufgefallen.


Quotefunction loadmap:l_file$

   l_ok = DOESFILEEXIST(l_file$) // Das geht
        l_ok = DOESFILEEXIST(l_file) // das nicht ??

endfunction
#137
Hi,
wenn ich in einem Type die Varable "x" erstelle und "x" als Variable in einer function erstelle und sie
als Instance? vom Type in dem das "x" deklariere
gibts ne Fehlermeldung.
Hier mal ein Code beispiel:
Code (glbasic) Select
// Das geht

FUNCTION a:
LOCAL y AS b
ENDFUNCTION

// Das nicht
FUNCTION c:
LOCAL x AS b  //<<<--- Das geht nicht
ENDFUNCTION

TYPE b
x
ENDTYPE
#138
Hi,
durch die Autovervollständigung werden mir,
short, int und long angezeigt.
Die sind aber inder Hilfe "noch" nicht aufgeführt.

Sind das neue Variablen Typen?
Gibt es nun aus float's und string's nun diese auch, oder ist da was im anmarsch?
#139
Hi, es ist ja nicht schlecht wenn man die Frames auf 60Hz begrenzt und so seine Spieler bewegung abstimmt,
aber was ist wen bei einem das Spiel nur 30 oder 20 Frames läuft?
Hier muss man die bewegung Frameunabhängig Steuern.

GLBasic hat hierfür eine sehr gute Function, GETTIMER()
Die gibt die zeit an von Showscreen bis zum nächsten und das können wir hierfür sehr gut nutzen.

Hier mal ein Beispiel Code wie es aussehen könnte.
Das Quadrat braucht etwas über 15sec. von einem Bildschirmrand bis zum andern.
Dabei spielt es keine rolle ob mit 20 FPS oder mit 500 FPS.

Code (glbasic) Select
// --------------------------------- //
// Project: Frameunabhängig bewegen
// Start: Sunday, March 04, 2007
// IDE Version: 4.114


LIMITFPS 20  /// hier mal werte ändern, -1 = Vsync Off

WHILE TRUE
move = GETTIMER()
time = GETTIMERALL()
//-------------
IF (time - temp) > 1000
INC a1,1 // Secundenzähler
temp = time
ENDIF
//-------------


//-----------Das ist der interesante Teil
x = x +(0.02 * move ) //<<<< Frameunabhängig bewegen, mal mit dem wert 0.02 rumspielen ;)
FILLRECT x,0,x+10,10,RGB(100,50,200)
IF x > 640
x = 0 // X zurücksetzen
a2 = a1 // Für die zeitmessung
a1 = 0
ENDIF
//---------------------------------------


// Das ist nur für die ausgabe
PRINT getfps()+" Frames",10,100
PRINT move+" millisec." ,10,120
PRINT a2+" Secunden vergangen",10,140
SHOWSCREEN
WEND




FUNCTION getfps:

STATIC fps_time,fps_counter,fps,fps_temp
fps_time = GETTIMERALL()
fps_counter = fps_counter + 1
IF (fps_time-fps_temp)>1000
fps_temp = fps_time
fps = fps_counter
fps_counter = 0
ENDIF

RETURN fps
ENDFUNCTION
#140
Hi ich habe mich mal an einer Function gemacht,
die es erlaubt Frames aus einem Tileset zu laden das nicht nur Horizontal oder Vertical angelegt ist.
Mit hilfe von "STATIC" werden auch keine globalen Variablen benutzt.

Ich hoffe ich habe nicht allzu wirr Programiert ;)

Hier mal die Bilder dazu:
http://www.deuteriumoxid.com/glbasic/tile.bmp
http://www.deuteriumoxid.com/glbasic/tile2.png

Function und Beispiel:
Code (glbasic) Select
// --------------------------------- //
// Project: LoadImage2
// Start: Saturday, March 03, 2007
// IDE Version: 4.114




///Beispiel:

// Die Bilder haben je 18 Tiles, einmal 32x32 und 128x128
DIM bild1[18]
DIM bild2[18]
// ertes Bild laden
// 0 - 17 = 18 Tiles
FOR i = 0 TO 17
bild1[i] = loadimage("tile.bmp",32,32,17,0)
NEXT
// zweites Tile laden
FOR i = 0 TO 17
bild2[i] = loadimage("tile2.png",128,64,17,0)
NEXT

// Variablen für das anzeigen, nur Testweise
GLOBAL c = 0
GLOBAL d = 0

//////////////////////////////////////////////////////////////////////////

WHILE TRUE
KeyHitUpdate()

IF KeyHit(57) = 2
INC c,1
IF c > 17 THEN c = 0
ENDIF

SPRITE bild1[c],0,0
SPRITE bild2[c],32,32

PRINT bild1[c],0,200
PRINT bild2[c],0,220
PRINT "Space Taste Drücken",100,100
SHOWSCREEN

WEND
/////////////////////////////////////////////////////////////////////////

// Ende vom Beispiel


//----Function loadimage ------------------------------------------

// erklärung der Argumente:
// l_path$ übernimmt die Pfad angabe der Datei
// l_tilex und l_tiley sind die Pixelbreite und höhe des einzelnen Tiles
// l_anzahl bekommt den Maximal wert der forschleife, siehe beispiel.
// l_tilenr ist der Index für loadsprite, er kann aber muss nicht unterschiedlich sein



FUNCTION loadimage:l_path$,l_tilex,l_tiley,l_anzahl,l_tilenr
STATIC s_counter = 1000  //Ab 1000 damit überschneidungen mit loadsprite nicht vorkommen
STATIC s_controll  //Kontrollschalter damit Loadsprite nur einmal benutzt wird
STATIC s_temp
STATIC s_x,s_y  // zum berechnen der Tile anzahl
STATIC s_xcount,s_ycount // Counter für die Positions verschiebung
// Variablien für Grundposition auf die sich die Verschiebung berechnet| x = 0 | y = 0
LOCAL l_posx
LOCAL l_posy



// maximal 2000 möglich, hier kann/muss man selber etwas verwalten
IF s_counter > 2000 THEN s_counter = 1000
IF s_controll = 0
s_temp = s_counter
LOADSPRITE l_path$,l_tilenr
GETSPRITESIZE l_tilenr,s_x,s_y // Abfrage wie gross das Bild ist
//Damit nur Ganzzahlen zurückgegeben werden
s_x = INTEGER(s_x/l_tilex)
s_y = INTEGER(s_y/l_tiley)
ENDIF

s_controll = 1 // damit loadsprite nich mehrmals ausgeführt wird

//------------------------------------------------------
IF s_xcount < s_x // X ACHSE
l_posx = (-s_xcount*l_tilex) // position nach links verschieben
l_posy = (-s_ycount*l_tiley) //position nach oben verschieben
s_xcount = s_xcount +1 // für den nächsten durchlauf x achse erhöhen

      // Y ACHSE
IF s_xcount = s_x
    s_ycount = s_ycount +1 //y achse nach ober erhöhen
       s_xcount = 0   // x achse wieder auf 0 setzen
// S_controll wieder auf null zurücksetzen
// damit man auch das nächste Bild wieder laden kann
IF s_counter >= (s_temp+l_anzahl) THEN s_controll = 0

IF s_controll  = 0
      s_xcount = 0 // X/Y Verschiebung zurücksetzen
        s_ycount = 0
ENDIF
ENDIF
// Einzelne Sprites erstellen
SPRITE l_tilenr,l_posx,l_posy
GRABSPRITE s_counter,0,0,l_tilex,l_tiley
SHOWSCREEN // Showscreen kann auskommentiert werden
BLACKSCREEN //Bilschirm Buffer wieder leeren
//----------------------------------------------------
INC s_counter,1 // Counter um 1 erhöhen
ENDIF




RETURN s_counter -1
ENDFUNCTION







// Gernots spitzen Function für ein KeyHit()



FUNCTION KeyHitUpdate:
GLOBAL gKeyDown[], gKeyState[]
LOCAL  k
LOCAL i
    // First Time call/ zum ersten Mal hier
    IF BOUNDS(gKeyDown[],0)=0
        DIM gKeyDown[256]
        DIM gKeyState[256]
    ENDIF

    // For each key / für jede Taste
    FOR i=0 TO 255
        k = KEY(i)
        // Key is pressed / Taste ist gedrückt
        IF k
            IF gKeyDown[i]
                gKeyState[i]=1
            ELSE
                gKeyDown[i]=1
                gKeyState[i]=2
            ENDIF
        ELSE
            // Key is not pressed / Taste nicht gedrückt

            // Has key been pressed before?
            // War die Taste gedrückt?
            IF gKeyDown[i]
                gKeyDown[i] = 0
                gKeyState[i] = -1
            ELSE
                gKeyState[i]=0
            ENDIF
        ENDIF
    NEXT
ENDFUNCTION





//  0 = not pressed / nicht gedrückt
//  2 = just pressed / gerade runtergedrückt
//  1 = pressed / gedrückt (gehalten)
// -1 = release event / wieder losgelassen
FUNCTION KeyHit: nkey
    RETURN gKeyState[nkey]
ENDFUNCTION