RPG-Engine Befehle

Previous topic - Next topic

cyby

hi,

habe mal ein paar Befehle für ein RPG programmiert, vielleicht kann der eine oder andere was abschauen oder schauen wie was geht
ist noch in einer sehr frühen entwicklung ... also gibt es noch einige Fehler oder manches ist so wie es später mal nicht werden sollte

-> LoadTile läd Tiles aus EINER Datei
-> DrawLayer zeichnet die Map
-> LoadMap läd eine Map
-> SaveMap speichert eine Map
Code (glbasic) Select
// --------------------------------- //
// Project: RPG-Engine 1
// Start: Sunday, October 10, 2004
// IDE Version: 2.41007
// --------------------------------- //
//LIMITFPS 30
GLOBAL mapx=10
GLOBAL mapy=10

GLOBAL max_tilex=2
GLOBAL max_tiley=2

GLOBAL tilex=32
GLOBAL tiley=32
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//------------------------------HAUPTSCHLEIFE------------------------------------
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------


LoadTile("tiles1.bmp",max_tilex,max_tiley)
LoadMap("map1.map",mapy,mapx)

WHILE KEY(1)=0 //das Programm wird Beendet wenn man ESC drückt
DrawLayer()


//--------------------------------------------------------------------------------
//------------------- FPS
dtime = GETTIMER()
 fps = ((1000/dtime)+fps)/2
 delay=delay+dtime
 IF delay>500
  delay=0
  showfps=fps
 ENDIF
 PRINT "FPS: "+showfps, 0,0
//--------------------------------------------------------------------------------
SHOWSCREEN
WEND

END






//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//------------------------------FUNCTIONEN---------------------------------------
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------


//--------------------------------------------------------------------------------
//------------------------ LoadMap(map_name$,mapx,mapy)
//--------------------------------------------------------------------------------
FUNCTION LoadMap:map_name$,mapx,mapy

DIM map[mapx][mapy]
    FOR y=0 TO mapy-1
        GETFILE map_name$, y, line$
        FOR x=0 TO mapx-1
            map[x][y]=MID$(line$, INTEGER(x*3), 3)
        NEXT
        //PRINT line$,15,y*15
    NEXT

ENDFUNCTION

//--------------------------------------------------------------------------------
//------------------------ SaveMap(map_name$,mapx,mapy)
//--------------------------------------------------------------------------------
FUNCTION SaveMap:map_name$,mapx,mapy

DIM map[mapx][mapy]
FOR y=0 TO mapy-1
FOR x=0 TO mapx-1
map[x][y] = RND(4)
NEXT
NEXT

    FOR y=0 TO mapy-1
    line$ = ""
        FOR x=0 TO mapx-1
            line$=line$+FORMAT$(3,0,map[x][y])
    NEXT
    //PRINT line$,15,y*15
        PUTFILE map_name$, y, line$
NEXT
ENDFUNCTION
//--------------------------------------------------------------------------------
//------------------------ DrawLayer()
//--------------------------------------------------------------------------------
FUNCTION DrawLayer:


FOR x = 0 TO mapx-1
FOR y = 0 TO mapy-1

FOR z = 0 TO max_tilex*max_tiley
//------------- Layer1
SELECT map[x][y]
CASE z
SPRITE z,x*tilex,y*tiley
ENDSELECT
NEXT
NEXT
NEXT


ENDFUNCTION
//--------------------------------------------------------------------------------
//------------------------ LoadTile(tile_name$,max_tilex,max_tiley)
//--------------------------------------------------------------------------------
FUNCTION LoadTile:tile_name$,max_tilex,max_tiley

LOCAL sprite_nummer
sprite_nummer = 0
BLACKSCREEN
//LOADBMP tile_name$
//----------------------------
FILLRECT  0, 0, 32,32, RGB(255,  0,  0)
FILLRECT 32, 0, 64,32, RGB(  0,  0,255)
FILLRECT  0,32, 32,64, RGB(  0,255,  0)
FILLRECT 32,32, 64,64, RGB(  0,255,255)
//----------------------------
FOR x=0 TO max_tilex
FOR y=0 TO max_tiley
sprite_nummer=sprite_nummer+1
GRABSPRITE sprite_nummer, x*tilex, y*tiley, tilex, tiley
NEXT
NEXT
BLACKSCREEN

ENDFUNCTION



Kitty Hello


cyby

habe jetzte schon weiter programmier, wenn ich soweit bin gibt es die ersten Versionen vom Editor

trucidare

Hallo cyby,

könntest du auch den erweietreten code einstellen? und vielleicht eine testmap? ich habe ein rpg projekt angefangen und bräuchte eine tile engine. vielleicht kannst du mir ja helfen.

danke
trucidare
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

trucidare

ich hab den ganzen kram mal ein wenig verbessert hier ein paar funktionen:

Code (glbasic) Select
//--------------------------------------------------------------------------------------------------
//-------------------------------------------Load Map-------------------------------------------
//--------------------------------------------------------------------------------------------------
FUNCTION LoadMap: lm_name$
// Diese Variablen sind als LOCAL definiert:
// lm_name$
LOCAL zwischenschritt$
DIM map[max_tilesx][max_tilesy][Layer]

FOR l = 0 TO Layer-1
FOR y = 0 TO max_tilesy-1
GETFILE lm_name$, y , zwischenschritt$
FOR x = 0 TO max_tilesx-1
SPLITSTR (zwischenschritt$, split$[], ",")
map[x][y][Select_Layer] = split$[x]
NEXT
NEXT
NEXT


ENDFUNCTION // LOADMAP

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


//--------------------------------------------------------------------------------------------------
//-------------------------------------------Draw Layer-----------------------------------------
//--------------------------------------------------------------------------------------------------

FUNCTION DrawLayer:
// Diese Variablen sind als LOCAL definiert:
//
FOR l = 0 TO Layer-1
FOR x = 0 TO max_tilesx-1
   FOR y = 0 TO max_tilesy-1
        SPRITE map[x][y][l],x*tile_size_x,y*tile_size_y
        IF SPRCOLL(map[x][y][l], x*tile_size_x,y*tile_size_y, 11998, mx, my) AND b1
        PRINT map[x][y][l], 0,410
        map[x][y][Select_Layer] = Tilenummer
        ENDIF
        IF SPRCOLL(map[x][y][l], x*tile_size_x,y*tile_size_y, 11998, mx, my) AND b2
        map[x][y][Select_Layer] = 19992
        ENDIF
   NEXT
NEXT
NEXT


ENDFUNCTION // DRAWLAYER

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

//--------------------------------------------------------------------------------------------------
//-------------------------------------------ShowTilebar----------------------------------------
//--------------------------------------------------------------------------------------------------

FUNCTION ShowTilebar: choose
// Diese Variablen sind als LOCAL definiert:
// choose
IF choose = 1
SPRITE 12000, 0, 420
SPRITE 12002, 0, 440
SPRITE 12001, 626, 440

IF SPRCOLL (11999, mx, my, 12001, 626, 440) AND b1
move = move+1
ENDIF
IF SPRCOLL (11999, mx, my, 12002, 0, 440) AND b1
move = move-1
IF move < 1 THEN move = 0
ENDIF
IF MOUSEAXIS(2) = 1
Select_Layer = Select_Layer -1
IF Select_Layer < 0 THEN Select_Layer = 0
ENDIF
IF MOUSEAXIS(2) = -1
Select_Layer = Select_Layer +1
IF Select_Layer > 2 THEN Select_Layer = 2
ENDIF

FOR x = 1+move TO 30+move
SPRITE x+(Select_Layer*1000), 10*(x-move)*2, 451
IF SPRCOLL(x+(Select_Layer*1000), 10*(x-move)*2, 451, 11998, mx, my) AND b1
Tilenummer = x+(Select_Layer*1000)
ENDIF
NEXT
ENDIF

PRINT "Layer: "+Select_Layer, 0, 0

ENDFUNCTION // SHOWTILEBAR

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

//--------------------------------------------------------------------------------------------------
//-------------------------------------------Save Map-------------------------------------------
//--------------------------------------------------------------------------------------------------

FUNCTION SaveMap: datei$
// Diese Variablen sind als LOCAL definiert:
// datei$


FOR y = 0 TO max_tilesy-1
line$ = ""
FOR x = 0 TO max_tilesx-1
line$=line$+FORMAT$(1,0,map[x][y])+","
NEXT
PUTFILE datei$, y, line$
NEXT

ENDFUNCTION // SAVEMAP

//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Kitty Hello

Da grins' ich bis zu den Ohren! Das liest sich wie ein Sommernachtsgedicht. Musik für meine hexadezimalen Ohren.

trucidare

hää versteh ich nicht ^^

edit: soo besser?
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Kitty Hello

Nein. Im Ernst. Dein Code liest sich super und zeigt, dass Du Ahnung hast, was Du machst.

trucidare

vielen dank :)

ist jetzt meine 4 te sprache die ich lern und ich muss sagen die kohle da rein zustecken hat sich gelohnt ... respekt gernot. Leider funzen keine programme auf meinem ppc mit windows for pocket pcs 2002 aber ansosnten sehr gute sprache
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Kitty Hello

PPC 2002 sollte schon laufen !? Nicht mal ein Hello World? Schau, dass Du die gx.dll im Windows-Verzeichnis hast.

trucidare

ne bekomm nur ien absoluten schwarzen bildschirm und der lutscht mein akku meistens komplett leer aber ich werd mal sehn ob ich die dll da drin hab. danke für den tipp
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Polarwolf

Vllt. könnte ja mal jemand n Tutorial für ein simples RPG schreiben O.o
Dann hättet ihr auch gleich n schönes Beispiel für User! :D

BumbleBee

Ne ne sowas fang ma gar net an.;) Braucht man das überhaupt ? Also ich nicht. Wenn man weiß wie man ne Map bastelt und sich darauf bewegt  (da gibts schon viele Beispiele hier)  dann ist ja das wichtigste schon fast gemacht. :D Ich denke nicht das den Rest jemand macht weil das ja schon fast ein Spiel wär. Wie man Gegner besiegt, Quests macht und dabei Ehrfahrung sammelt ist ja denn eh nicht mehr schwer.Und die Geschicht muß sich ja sowieso jeder selber ausdenken.

Aber du kannst ja gern eins machen. Also worauf wartest du noch.:D

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Polarwolf

Najut. Ich denke ich werde mir das mal angucken. Wird bestimmt n riesiger spaß ^^

Schranz0r

Tu dir und uns den gefallen und back kleine Brötchen zum Anfang!
Da wenn du gleich in die vollen gehst, ist die enttäuschen meist groß, wenns nicht hinhaut !
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard