Good to see I'm not alone(in the quest to create an awsome RPG).......... I always have sub-projects and and a RPG(it's.......not exactly text based....

) is one of mines at the time. I can post my entire project for ya if you want(I always throw my source at people, lol.). You gotta wait a while, tho, i'm usin a phone atm and as you can see im gettin lazy wit da typin.....
L8tr, I'm gonna ask a question anyway, cuz I's kinnda....stuck. so look out for a new thread wit my name on it....i'll upload it(and probly source) therre.....
EDIT}}}}}
Okay, So lookie here at my code. You can see I havent bothered with cleanning

But you'll get the basics of my system, i Think. you need an explaination, I'll give it!
Rem Project: Rpg for DBP
Rem Created: 5/21/2010 7:26:06 PM
Rem Author : Stanas Omari Bryant, A.k.A: DArKDraGoN
Rem ***** Main Source File *****
Rem Setup enviroment/initialize.......
Sync on
Sync rate 60
Set Text font "Lucida Console"
SET TEXT TO BOLD
`#include "Battle Functions.Dba"
Rem Load Music............
load Music "Music/corazonazul_ff6boss.mid",32
SET MUSIC SPEED 32,110
SET MUSIC Volume 32,80
loop music 32
rem Load Sounds..........
load sound "Sounds/System 1.wav",1
load sound "Sounds/Clash.wav",2
load music "Sounds/Conflict start.mp3",31
SET MUSIC SPEED 31,115
SET MUSIC Volume 31,100
stop music 31
Rem Types ------------------------
Type Party
numberofcombatants as integer
Endtype
` --------------------------------------
Type Combatant
Name as string
Class as string
imgset as integer
lvl as integer
State as integer
aniframe as integer
anitimer1 as integer
anitimer2 as integer
anitimer3 as integer
aniplus as integer
Flag1 as boolean
Flag2 as boolean
Flag3 as boolean
x as float
y as float
z as float
velx as float
vely as float
velz as float
destx as float
desty as float
destz as float
spralpha as integer
R as integer
G as integer
B as integer
inicounter as integer
side as integer
target as integer
Nextaction as string
Nextaction2 as string
Endtype
` --------------------------------------
Type Globl
BattleState as string
Battletimer as float
Startmsgtime as integer
menustate as integer
selct as integer
anix as integer
Playrcharselec as integer
friction as float
grav as float
Endtype
` --------------------------------------
Type Msgbox
active as boolean
x as float
y as float
destx as float
desty as float
speed as float
Endtype
` --------------------------------------
Type Cursor
active as boolean
x as float
y as float
destx as float
desty as float
ang# as float
destang# as float
Endtype
` --------------------------------------
` End of Type declarations --------------------------------------
` Dimentualize (^~^) arrays and variables....................
Dim Party(4) as Party
Rem Player Party
Party(1).numberofcombatants = 3
Rem Enemy Party
Party(2).numberofcombatants = Rnd(2) + 1
` --------------------------------------
Dim Player(8) as Combatant
for p = 1 to 8
Player(p).x = -560+(p*35)
Player(p).y = 0
Player(p).z = 290+(p*-35)
Player(p).aniplus = 1
Player(p).aniframe = 1
Player(p).velx = 70
Player(p).inicounter = 1 + (p*10)
` + Rnd(35)
`Player(p).vely = -35
next p
rem Set Player 1 to Ninja, And Idle.........
Player(1).Class = "Ninja"
Player(1).State = 0
Rem Set rest to other
For p = 2 to 8
Player(p).Class = "Warrior"
Player(p).State = 0
next p
Player(3).Class = "Ninja"
Player(3).State = 0
` --------------------------------------
Dim Enemy(8) as Combatant
for p = 1 to 8
Enemy(p).x = 970+(p*35)
Enemy(p).y = 0
Enemy(p).z = 465+(p*-35)
Enemy(p).velx = -70
Enemy(p).inicounter = 1 + (p*10) + 35
Enemy(p).vely = -25
Enemy(p).Name = "FiRe KniGht lvl." + STR$(p)
Enemy(p).Class = "FireKnight"
Enemy(p).State = 0
Enemy(p).aniplus = 1
Enemy(p).aniframe = 1
Enemy(p).R = 255
Enemy(p).G = 255
Enemy(p).B = 255
next p
` --------------------------------------
Dim Globals(1) as Globl
Globals(1).friction = 0.905
Globals(1).grav = 0.65
Globals(1).Playrcharselec = 1
` --------------------------------------
Dim MsgBox(10) as Msgbox
MsgBox(1).x = -1000
MsgBox(1).y = 380
MsgBox(1).destx = 80
MsgBox(1).desty = 380
MsgBox(1).speed = 9
` --------------------------------------
Dim Cursor(5) as Cursor
Cursor(1).x = -6500
Cursor(1).y = 380
Cursor(1).destx = 80
Cursor(1).desty = 380
Cursor(1).destang# = 90
` --------------------------------------
` --------------------------------------
` --------------------------------------
` --------------------------------------
` --------------------------------------
` ----------End of Arrays---------------
` --------------------------------------
` --------------------------------------
` --------------------------------------
` --------------------------------------
` --------------------------------------
REm ANIMATION ARRAYS...........
REm Party members/ bosses...........
Dim WarriorIdle(15)
Dim NinjaIdle(15)
REm Monsters/NPCs....
Dim FireKnightIdle(15)
REM Load and Capture animation arrays
REm Load in Animation
Load_In_Animation_into_FreeArray("Sprites/NinjaIdle.png", 4, NinjaIdle, "What?", 32,45)
rem capture the animation data
Make array from memblock NinjaIdle(15),1
Delete memblock 1
REm Load in Animation
Load_In_Animation_into_FreeArray("Sprites/WarriorIdle.png", 4, NinjaIdle, "What?", 32,55)
rem capture the animation data
Make array from memblock WarriorIdle(15),1
Delete memblock 1
REm Load in Animation
Load_In_Animation_into_FreeArray("Sprites/FireIdle.PNG", 4, NinjaIdle, "What?", 47,74)
rem capture the animation data
Make array from memblock FireKnightIdle(15),1
Delete memblock 1
`Load_In_Animation_into_FreeArray("Sprites/Knight Idle.PNG", 3, NinjaIdle, "What?", 21,33)
`LoadInToFreeImage("")
`Player(1).flag1 = LoadInToFreeImage("Sprites/Staple.bmp")
`KnightIdle() =
Rem Int Lua, incase needed.
LUA INIT
Rem Load Images.................
Global ene as integer
ene = LoadInToFreeImage("Sprites/Staple.bmp")
Global MessageBox as integer
MessageBox = LoadInToFreeImage("Sprites/message.png")
Global cursor as integer
cursor = LoadInToFreeImage("Sprites/cur.png")
Global BattleBg as integer
BattleBg = LoadInToFreeImage("Sprites/Photo021.jpg")
cls
Text 0,0,"...Activating Combat Mode...."
get image 9999+5,0,0,Text Width("...Activating Combat Mode...."),Text Height("...Activating Combat Mode....")
btl$ ="---Conflict Start!---"
cls
Text 0,0,btl$
get image 9999+6,0,0,Text Width(btl$),Text Height(btl$)
Globalbanneralpha = 0
Rem Pre - Battle stuff
Globals(1).menustate = 0
Globals(1).selct = 0
plus = 1
plus2 = 1
Global amask as boolean
Do
cls
`Paste image BattleBg,0,0,1
Globals(1).Startmsgtime = Globals(1).Startmsgtime + 1
Cursor(1).destang# = 90
if Globals(1).Startmsgtime > 100 then Globalbanneralpha = curvevalue(0,Globalbanneralpha,15) :sprite 9999,100,185,9999+5
if Globals(1).Startmsgtime < 100 then Globalbanneralpha = curvevalue(255,Globalbanneralpha,15) :sprite 9999,100,185,9999+5
if Globals(1).Startmsgtime = 105 then play music 31
if Globals(1).Startmsgtime > 120 and Globals(1).Startmsgtime < 210 then Globalbanneralpha = curvevalue(255,Globalbanneralpha,6) :sprite 9999,100,185,9999+6
if Globals(1).Startmsgtime > 210 then Globalbanneralpha = curvevalue(0,Globalbanneralpha,15) :sprite 9999,100,185,9999+6
Scale sprite 9999,170
offset sprite 9999,20,5
Rotate Sprite 9999,Curveangle(2,Sprite angle(9999),9)
Set sprite alpha 9999,Globalbanneralpha
for pl = Party(1).numberofcombatants to 1 step -1
Player(pl).inicounter = Player(pl).inicounter - 1
if Player(pl).inicounter < 0
Control_player(pl)
Render_player(pl)
endif
next pl
for pl = Party(2).numberofcombatants to 1 step -1
Enemy(pl).inicounter = Enemy(pl).inicounter - 1
if Enemy(pl).inicounter < 0
Control_enemy(pl)
Render_enemy(pl)
endif
next pl
Control_msgboxes()
If Globals(1).Battlestate = "" then Globals(1).Battlestate = "Select"
If Globals(1).Battlestate = "Select"
if upkey() = 1 and umask = 0 then Globals(1).selct = Globals(1).selct - 1 : umask = 1 : play sound 1
if downkey() = 1 and dmask = 0 then Globals(1).selct = Globals(1).selct + 1 : dmask = 1 : play sound 1
if upkey() = 0 and umask = 1 then umask = 0
if downkey() = 0 and dmask = 1 then dmask = 0
if returnkey() = 0 and amask = 1 then amask = 0
if Globals(1).menustate = 0
Control_Cursors(1)
if Globals(1).selct = 0
if returnkey() = 1 and amask = 0 then Globals(1).selct = 0 : amask = 1 :Globals(1).menustate = 1 : play sound 2
Cursor(1).destx = 165
Cursor(1).desty = 402
endif
if Globals(1).selct = 1
Cursor(1).destx = 185
Cursor(1).desty = 422.5
endif
if Globals(1).selct = 2
Cursor(1).destx = 205
Cursor(1).desty = 442.5
endif
if Globals(1).selct > 2 then Globals(1).selct = 0
if Globals(1).selct < 0 then Globals(1).selct = 2
Text 175,400,"Fight!"
Text 195,420,"Run!"
Text 215,440,"Status!"
endif
if Globals(1).menustate = 1
Control_Cursors(1)
if Globals(1).selct = 0
if returnkey() = 1 and amask = 0 then Globals(1).selct = 0 : amask = 1 :Globals(1).menustate = 0 : play sound 2: Select_target(1) : Player(Globals(1).Playrcharselec).Nextaction = "Attack" :Globals(1).Playrcharselec = Globals(1).Playrcharselec + 1
Cursor(1).destx = 165
Cursor(1).desty = 402
endif
if Globals(1).selct = 1
Cursor(1).destx = 185
Cursor(1).desty = 422.5
endif
if Globals(1).selct = 2
Cursor(1).destx = 205
Cursor(1).desty = 442.5
endif
if Globals(1).selct > 2 then Globals(1).selct = 0
if Globals(1).selct < 0 then Globals(1).selct = 2
Text 175,400,"Attack!"
Text 195,420,"Special!"
Text 215,440,"Item!"
endif
endif
if Globals(1).Battlestate = "Battle"
Control_Cursors(1)
Print "BATTLE!"
`Execute All attacks, set back to Select Attack State...
Endif
if Globals(1).Playrcharselec > Party(1).numberofcombatants Then Globals(1).Battlestate = "Battle"
if Globals(1).anix > 8 then plus = -1
if Globals(1).anix < 1 then plus = 1
Globals(1).anix = Globals(1).anix + plus
sync
Loop
Function Control_player(plyr)
Player(plyr).velx = Player(plyr).velx * Globals(1).friction
Player(plyr).velz = Player(plyr).velz * Globals(1).friction
Player(plyr).vely = Player(plyr).vely - Globals(1).grav
if Player(plyr).y > 0 then Player(plyr).y = 0 : Player(plyr).vely = Player(plyr).vely/-2.1
if Player(plyr).vely > -0.15 and Player(plyr).vely < 0.15 then Player(plyr).vely = 0
Player(plyr).x = Player(plyr).x + Player(plyr).velx
Player(plyr).y = Player(plyr).y - Player(plyr).vely
Player(plyr).z = Player(plyr).z + Player(plyr).velz
Player(plyr).R = curvevalue(255,Player(plyr).R,15)
Player(plyr).G = curvevalue(255,Player(plyr).G,15)
Player(plyr).B = curvevalue(255,Player(plyr).B,15)
endfunction
Function Render_player(plyr)
Rem Animation qualities that effect all combatants,states......
inc Player(plyr).anitimer1
if Player(plyr).anitimer1 > 5 then inc Player(plyr).aniframe, Player(plyr).aniplus: Player(plyr).anitimer1 = 0
If Player(plyr).Class = "Warrior"
If Player(plyr).State = 0
rem Animation specific Binds.....
if Player(plyr).aniframe = 4 then Player(plyr).aniplus = -1 : Player(plyr).aniframe = 4
if Player(plyr).aniframe = 1 then Player(plyr).aniplus = 1 : Player(plyr).aniframe = 1
Sprite plyr + 9000,Player(plyr).x,(Player(plyr).y + Player(plyr).z)/2,WarriorIdle(Player(plyr).aniframe)
endif
Endif
If Player(plyr).Class = "Ninja"
If Player(plyr).State = 0
rem Animation specific Binds.....
if Player(plyr).aniframe = 4 then Player(plyr).aniplus = -1 : Player(plyr).aniframe = 4
if Player(plyr).aniframe = 1 then Player(plyr).aniplus = 1 : Player(plyr).aniframe = 1
Sprite plyr + 9000,Player(plyr).x,(Player(plyr).y + Player(plyr).z)/2,NinjaIdle(Player(plyr).aniframe)
endif
Endif
if sprite exist(plyr + 9000) = 1
Set Sprite Diffuse plyr + 9000,Player(plyr).R,Player(plyr).G,Player(plyr).B
endif
`Paste Image NinjaIdle(f2+1),Player(plyr).x,(Player(plyr).y + Player(plyr).z)/2
endfunction
Function Control_Enemy(plyr)
Enemy(plyr).velx = Enemy(plyr).velx * Globals(1).friction
Enemy(plyr).velz = Enemy(plyr).velz * Globals(1).friction
Enemy(plyr).vely = Enemy(plyr).vely - Globals(1).grav
if Enemy(plyr).y > 0 then Enemy(plyr).y = 0 : Enemy(plyr).vely = Enemy(plyr).vely/-2.1
if Enemy(plyr).vely > -0.15 and Enemy(plyr).vely < 0.15 then Enemy(plyr).vely = 0
Enemy(plyr).x = Enemy(plyr).x + Enemy(plyr).velx
Enemy(plyr).y = Enemy(plyr).y - Enemy(plyr).vely
Enemy(plyr).z = Enemy(plyr).z + Enemy(plyr).velz
Enemy(plyr).R = curvevalue(255,Enemy(plyr).R,15)
Enemy(plyr).G = curvevalue(255,Enemy(plyr).G,15)
Enemy(plyr).B = curvevalue(255,Enemy(plyr).B,15)
endfunction
Function Render_Enemy(plyr)
Rem Animation qualities that effect all combatants,states......
inc Enemy(plyr).anitimer1
if Enemy(plyr).anitimer1 > 5 then inc Enemy(plyr).aniframe, Enemy(plyr).aniplus: Enemy(plyr).anitimer1 = 0
If Enemy(plyr).Class = "FireKnight"
If Enemy(plyr).State = 0
rem Animation specific Binds.....
if Enemy(plyr).aniframe = 4 then Enemy(plyr).aniplus = -1 : Enemy(plyr).aniframe = 4
if Enemy(plyr).aniframe = 1 then Enemy(plyr).aniplus = 1 : Enemy(plyr).aniframe = 1
Sprite plyr + 8000,Enemy(plyr).x,(Enemy(plyr).y + Enemy(plyr).z)/2,FireKnightIdle(Enemy(plyr).aniframe)
endif
Endif
if sprite exist(plyr + 8000) = 1
Set Sprite Diffuse plyr + 8000,Enemy(plyr).R,Enemy(plyr).G,Enemy(plyr).B
endif
`Paste Image ene,Enemy(plyr).x,(Enemy(plyr).y + Enemy(plyr).z)/2,1
endfunction
Function Control_msgboxes()
For m = 1 to 1
MsgBox(m).x = curvevalue(MsgBox(m).destx,MsgBox(m).x,MsgBox(m).speed)
MsgBox(m).y = curvevalue(MsgBox(m).desty,MsgBox(m).y,MsgBox(m).speed)
Paste image MessageBox,MsgBox(m).x,MsgBox(m).y,1
next m
endfunction
Function Control_Cursors(moveflag)
For m = 1 to 1
Cursor(m).x = curvevalue(Cursor(m).destx,Cursor(m).x,10)
Cursor(m).y = curvevalue(Cursor(m).desty,Cursor(m).y,10)
Cursor(m).ang# = curvevalue(Cursor(m).destang#,Cursor(m).ang#,5)
if moveflag = 0
Sprite 9999+m,Cursor(m).x,Cursor(m).y,cursor
else
Sprite 9999+m,Cursor(m).x + Globals(1).anix,Cursor(m).y,cursor
endif
rotate sprite 9999+m,Cursor(m).ang#
next m
endfunction
Function LoadInToFreeImage(filename as string)
For i = 1 to 55555
if image exist(i)=0 then freeimage = i : exit
next i
load image filename,freeimage
EndFunction freeimage
Function Grab_image_to_free(x as float,y as float,afterwidth as float,afterheight as float)
For i = 1 to 55555
if image exist(i)=0 then freeimage = i : exit
next i
get image freeimage,x,y,afterwidth,afterheight
endfunction freeimage
Function Load_In_Animation_into_FreeArray(filename as string, numframes as integer,arrayname, initialname as string, fwidth as integer,fheight as integer)
frame = 0
Undim Freearray(0)
Dim Freearray(100)
cls
For i = 1 to 55555
if image exist(i)=0 then freeimage = i : exit
next i
load image filename,freeimage
paste image freeimage,0,0
imgsx = int(Image Width(freeimage) / fwidth)
imgsy = int(Image Height(freeimage) / fheight)
for fx = 0 to imgsx - 1
for fy = 0 to imgsy - 1
frame = frame + 1
Freearray(frame) = Grab_image_to_free(fx*fwidth,fy*fheight,(fx*fwidth)+fwidth,(fy*fheight)+fheight )
` box fx*fwidth,fy*fheight,(fx*fwidth)+fwidth,(fy*fheight)+fheight
next fy
next fx
if memblock exist(1) = 1 then delete memblock 1
Make memblock from array 1,Freearray(0)
Delete image freeimage
EndFunction
Function Select_Target(current)
selec = 1
switch = 1
umask = 0
dmask = 0
do
cls
`Paste image BattleBg,0,0,1
if selec < 1 then selec = Party(2).numberofcombatants
if selec > Party(2).numberofcombatants then selec = 1
Cursor(1).destx = Enemy(selec).x - 10
Cursor(1).desty = (Enemy(selec).y + Enemy(selec).z)/2 - 5
Cursor(1).destang# = 135
Control_Cursors(1)
Player(Globals(1).Playrcharselec).R = curvevalue(75,Player(Globals(1).Playrcharselec).R,8)
Player(Globals(1).Playrcharselec).B = curvevalue(75,Player(Globals(1).Playrcharselec).B,8)
for e = 1 to Party(2).numberofcombatants
if e = selec
Enemy(e).B = curvevalue(75,Enemy(e).B,8)
Enemy(e).G = curvevalue(75,Enemy(e).G,8)
else
Enemy(e).B = curvevalue(255,Enemy(e).B,15)
Enemy(e).G = curvevalue(255,Enemy(e).G,15)
endif
next e
Text Cursor(1).x - Text Width(Enemy(selec).Name)+(Rnd(2)-Rnd(2)),Cursor(1).y-25+(Rnd(2)-Rnd(2)),Enemy(selec).Name
if upkey() = 0 then umask = 0
if downkey() = 0 then dmask = 0
if Returnkey() = 0 then amask = 0
if upkey() = 1 and umask = 0 then selec = selec + 1 : Play sound 1 : umask = 1
if downkey() = 1 and dmask = 0 then selec = selec - 1 : Play sound 1 : dmask = 1
if Returnkey() = 1 and amask = 0 then Play sound 2 : amask = 1 : exit
for c = 1 to Party(1).numberofcombatants
Control_player(c)
Render_player(c)
next c
`remstart
for e = 1 to Party(2).numberofcombatants
Control_Enemy(e)
Render_enemy(e)
next e
`remend
Print "Select!"
sync
loop
Player(current).target = selec
selec = 1
selx = 1
endfunction
Hope it helps a bit.