27
Drak Basic, PRO : Játékfejlesztés ! Tutorialok,Forráskódok.STB.
-
InterFoxSOFT #27 Kéne egy kis segítség...
Készíttetem egy amatőr bénácska RPG-t, de vannak vele problémák.
Tudom itt nincsenek DBP-sok, de ti még így is könnyebben megfogjátok érteni mint én.
Probléma 01:Nem tudok saját karaktereket megfelelően beilleszteni a programba, kénytelen voltam kovkákat és gömböket kreálni helyettük.
Így kell beadni egy karaktert:
----------------------------------
tifa=1 : Load object "tifa.x",tifa
Scale object tifa,30,20,35
load image "tifatextura.bmp",tifa
-----------------------------------
Probléma 02:joystick használat, tudom, hogy kell rávenni a programot a joy használatára 2d-s hülyeségeknél működik is, de ha itt hozzáadom a programhoz az egész képernyő ki kékül indításkor.
Így kell használni:
-----------------------------------
if joystick up()=1 then y=y-1
if joystick down()=1 then y=y+1
if joystick left()=1 then x=x-1
if joystick right()=1 then x=x+1
-----------------------------------
----------
A kód:
----------
------------------------------------
Rem Project: RPG
Rem Created: 2009.05.23. 12:46:25
Rem ***** Main Source File *****
REM RGBRPG,
REM DarkBasicPro
Type Character
Rage as Float
Grace as Float
Brains as Float
MaxHP as Float
HP as Float
Money as Float
Level as Float
XP as Float
Name as String
Object as Integer
EndType
Global Player as Character
Type Baddie
Rage as Float
Grace as Float
Brains as Float
HP as Float
XPDrop as Integer
MoneyDrop as Integer
Name as String
Object as Integer
Endtype
Dim Enemies(10) as Baddie
global Fighting as Integer
sync on: sync rate 60
randomize timer()
FirstTimeThrough = 0
Player.Object = 1
Fighting = 0
global Loopy as integer
global Attack as integer
Loopy = 400
Global AttackName$ as String
global DamageFloat as Integer
global Combatant as Integer
global damage as Integer
global FloatTime as Integer
Do
if FirstTimeThrough = 0
NameCharacter() `asks player for a name, keeps it.
StatCharacter() `creates random stats and either rerolls or keeps.
GenerateBaddie() `Might work.
MakeCube() `makes our player object, colours it etc.
MakeWorld() `creates the floor plain, lights etc.
MakeLevel() `generates the buildings/walls of our environment
MakeFloater() `Make the plain that shows damage.
FirstTimeThrough = 1
sync on
endif
if Fighting =0
CubeMovement() `controls the movement of our cube character. WASD keys.
Endif
ThirdPerson() `positions the camera in a 3rd-person style position.
DrawStats()
if Object Collision(1,0)>49
if Object Collision(1,0)<100
Combatant = Object Collision(1,0)-50
DrawBaddieStats()
DoFight()
endif
endif
if Player.XP>100*Player.Level
Level()
endif
if DamageFloat>0
FloatTime=250
DamageFloat = 0
endif
DamageFloater()
Sync
Loop
Function NameCharacter()
sync off
`Now, create our character.
CLS
Set Cursor 0,0
Input "Enter your cube's name:",Player.Name
Print
Print "Welcome ";Player.Name;" the Cube."
Wait 1000
Endfunction
Function StatCharacter()
do
Cls
Set Cursor 0,0
Print Player.Name;", press [R] to re-roll stats, or [Y] to accept stats."
Print
`100 stat points initially. Previous method sometimes resulted in Brains=-1 (ironic, really)
`So we've set a 'points left' and made sure each stat is always at least 1.
Player.Rage=1
Player.Grace=1
Player.Brains=1
AmountLeft=97
Player.Rage=Player.Rage+rnd(AmountLeft)
AmountLeft=AmountLeft-Player.Rage+1
Player.Grace=Player.Grace+rnd(AmountLeft)
AmountLeft=AmountLeft-Player.Grace+1
Player.Brains=Player.Brains+AmountLeft
Player.HP=Player.Rage+Player.Grace+Player.Brains
Player.MaxHP=Player.HP
Player.Money=(Player.Brains+Player.Grace)*2
Player.Level=1
`Still not got a good name or system for assigning the main unit of 'barter'. Depends.
`Print out the stats - note, Rage, Grace, and Brains correspond to Red, Green and Blue
`respectively. This will help people figure out the relative skills of an enemy, etc.
Ink RGB(255,0,0),0
Print "(R)age: ";Player.Rage
Ink RGB(0,255,0),0
Print "(G)race: ";Player.Grace
Ink RGB(0,0,255),0
Print "(B)rains: ";Player.Brains
Ink RGB(255,255,255),0
Print "Health: ";Player.HP;"/";Player.MaxHP
Print "Monetary Units: ";Player.Money
Ink RGB(INT(Player.Rage),INT(Player.Grace),INT(Player.Brains)),0
Box 180,30,260,110
Ink RGB(255,255,255),0
`Let the player choose to keep the stats or re-roll.
Do
a$=Lower$(Inkey$())
If a$="r" or a$="y"
wait 300
Exit
endif
Loop
if a$="y" Then Exit
loop
Endfunction
Function MakeCube()
make object cube Player.Object,Player.HP/10
color object Player.Object, rgb(INT(Player.Rage),INT(Player.Grace),INT(Player.Brains))
color backdrop 0
make object collision box Player.Object,-7,-7,-7,7,7,7,0
EndFunction
Function MakeWorld()
autocam off
make object plain 4,800,800
position object 4,0,0,0
rotate object 4,-90,0,0
color object 4,rgb(50,50,50)
set object collision off 4
color ambient light rgb(20,20,20)
autocam on
EndFunction
Function CubeMovement()
CubeAngle#= Object Angle Y(Player.Object)
PosX#=Object Position X(Player.Object)
PosY#=Object Position Y(Player.Object)
PosZ#=Object Position Z(Player.Object)
If Keystate(17)=1 : `"W" key for forward.
` WKey = 1
CubeSpeed# = 1.5
CubeMoveX# = -sin(-Object Angle Y(Player.Object)) * CubeSpeed#
CubeMoveZ# = cos(-Object Angle Y(Player.Object)) * CubeSpeed#
PosX#=PosX#+CubeMoveX#
PosZ#=PosZ#+CubeMoveZ#
CurrentXRot#=Object Angle X(Player.Object)
Xrotate Object Player.Object,CurrentXRot#+5
else
WKey = 0
Endif
If Keystate(31)=1 : `"S" key for reverse.
CubeRevSpeed# = 1.0
CubeRevMoveX# = -sin(-Object Angle Y(Player.Object)) * CubeRevSpeed#
CubeRevMoveZ# = cos(-Object Angle Y(Player.Object)) * CubeRevSpeed#
PosX#=PosX#-CubeRevMoveX#
PosZ#=PosZ#-CubeRevMoveZ#
CurrentXRot#=Object Angle X(Player.Object)
Xrotate Object Player.Object,CurrentXRot#-3
Endif
If Keystate(30)=1 then Yrotate Object Player.Object, Wrapvalue(CubeAngle#-1.5) :`"A" for left.
If Keystate(32)=1 then Yrotate Object Player.Object, Wrapvalue(CubeAngle#+1.5) :`"D" for right.
if object collision (1,5) > 0
dec PosX#,get object collision x()
dec PosY#,get object collision y()
dec PosZ#,get object collision z()
endif
position object Player.Object, PosX#,4.5+(Player.Level/2),PosZ#
EndFunction
Function TestKeys()
Set Cursor 0,0
Print SCANCODE()
EndFunction
Function ThirdPerson()
CameraOffset# = 50
CameraHeight = Object Position Y(Player.Object)+30
OffsetX# = -sin(-Object Angle Y(Player.Object)) * CameraOffset#
OffsetZ# = cos(-Object Angle Y(Player.Object)) * CameraOffset#
Position Camera 0, Object Position X(Player.Object)-OffsetX#, CameraHeight , Object Position Z(Player.Object)-OffsetZ#
Point Camera 0, Object Position X(Player.Object), Object Position Y(Player.Object)+15, Object Position Z(Player.Object)
EndFunction
Function MakeLevel()
make object box 5,100,20,20
make object collision box 5,-50,-10,-10,50,10,10,0
position object 5, 150,0,120
Endfunction
Function GenerateBaddie()
for i = 0 to array count(Enemies())
Enemies(i).Rage=rnd(50)
Enemies(i).Grace=rnd(50)
Enemies(i).Brains=rnd(50)
Enemies(i).HP=(Enemies(i).Rage+Enemies(i).Grace+Enemies(i).Brains)
Enemies(i).XPDrop=(Enemies(i).Rage+Enemies(i).Grace+Enemies(i).Brains)/3
Enemies(i).MoneyDrop=Enemies(i).XPDrop/2
if Enemies(i).Rage>Enemies(i).Grace
if Enemies(i).Rage>Enemies(i).Brains
Enemies(i).Name="Bezerker Ball"
else
Enemies(i).Name="Brainy Ball"
endif
else
if Enemies(i).Grace>Enemies(i).Brains
Enemies(i).Name="Ninja Ball"
else
Enemies(i).Name="Brainy Ball"
endif
endif
Enemies(i).Object=50+i
Make Object Sphere Enemies(i).Object,(Enemies(i).HP)/6
Set Object Collision to Spheres Enemies(i).Object
Set Object Collision on Enemies(i).Object
Position Object Enemies(i).Object,rnd(600)-300,Enemies(i).HP/12,rnd(600)-300
Color Object Enemies(i).Object,rgb(Enemies(i).Rage,Enemies(i).Grace,Enemies(i).Brains)
next i
Endfunction
Function DrawStats()
set cursor 1,1
Print Player.Name," The Lv.",Player.Level," Cube"
ink rgb(255,0,0),0
set cursor 1,17
Print "Rage:"
box 5,33,Player.Rage+5,43
ink rgb(0,255,0),0
set cursor 1,43
Print "Grace:"
box 5,58,Player.Grace+5,68
ink rgb(0,0,255),0
set cursor 1,68
Print "Brains:"
box 5,83,Player.Brains+5,93
ink rgb(255,255,255),0
set cursor 1,94
Print "HP:"
ink rgb(INT(Player.Rage),INT(Player.Grace),INT(Player.Brains)),0
box 3,108,Player.MaxHP+7,120
ink rgb(255,255,255),0
box 5,109,Player.HP+5,119
if keystate(18)=1
set cursor 1,124
Print "XP: ",Player.XP
set cursor 1,138
Print "Money: ",Player.Money
endif
EndFunction
Function DrawBaddieStats()
Collider= Combatant
set cursor screen width()-Text Width (Enemies(Collider).Name)-Text Width (" The Enemy!"),1
Print Enemies(Collider).Name," The Enemy!"
ink rgb(255,0,0),0
set cursor screen width()-Text Width("Rage:"),17
Print "Rage:"
box screen width()-Enemies(Collider).Rage-5,33,screen width()-5,43
ink rgb(0,255,0),0
set cursor screen width()-Text Width ("Grace:"),43
Print "Grace:"
box screen width()-Enemies(Collider).Grace-5,58,screen width()-5,68
ink rgb(0,0,255),0
set cursor screen width()-Text Width("Brains:"),69
Print "Brains:"
box screen width()-Enemies(Collider).Brains-5,84,screen width()-5,94
ink rgb(255,255,255),0
set cursor screen width()-Text Width("HP:"),95
Print "HP:"
box screen width()-Enemies(Collider).HP-5,110,screen width()-5,120
EndFunction
Function DoFight()
Fighting = 1
ConSystemInk()
center Text screen width()/2,screen height()-65,"Fight"
ink rgb(255,255,255),0
BattleTimer()
CombatCamera()
If Keystate(2) = 1 :`Key 1
if Player.Rage>5
Attack = 1
AttackName$ = "Rage Frenzy"
endif
endif
If Keystate(4) = 1 :`Key 3
if Player.Grace>5
Attack = 2
AttackName$ = "Stealth Stab"
endif
endif
If Keystate(7) = 1 :`Key 6
if Player.Brains>40
Attack = 3
AttackName$ = "Emotional Vampirism"
endif
endif
if Keystate(6) = 1 :`Key 5
if Player.Brains>5
Attack = 4
AttackName$ = "Mind Heal"
endif
endif
if Keystate(5) = 1 :`Key 4
if Player.Grace>40
Attack = 5
AttackName$ = "Reactive Momentum"
endif
endif
if Keystate(3) = 1 :`Key 2
if Player.Rage>40
Attack = 6
AttackName$ = "All Or Nothing"
endif
endif
if Attack > 0
ink 0,0
center Text screen width()/2,screen height()-45,AttackName$
ink rgb(255,255,255),0
endif
if Loopy=0
if Attack>0
if object exist(Object Collision(1,0))
eneX=Object Position X(Enemies(Object Collision(1,0)-50).Object)
eneY=Object Position Y(Enemies(Object Collision(1,0)-50).Object)
eneZ=Object Position Z(Enemies(Object Collision(1,0)-50).Object)
endif
DamageBaddie()
endif
endif
if DamageFloat=500
show object 300
position object 300,eneX,eneY+5,eneZ
point object 300,camera position X(),camera position Y(),camera position Z()
DamageFloat=499
endif
EndFunction
Function KillBaddie()
Fighting = 0
Loopy = 400
Player.XP = Player.XP + Enemies(Combatant).XPDrop
Player.Money = Player.Money + Enemies(Combatant).MoneyDrop
delete object Object Collision(1,0)
EndFunction
Function CombatCamera()
XDiff = Object Position X(Object Collision(1,0)) - Object Position X(1)
ZDiff = Object Position Z(Object Collision(1,0)) - Object Position Z(1)
angle# = ATanFull(XDiff, ZDiff)
angle# = WrapValue(angle#)
AngleDiff# = Object Angle Y(1) - angle#
while (AngleDiff# < -180)
AngleDiff# = AngleDiff# + 360
endwhile
while (AngleDiff# > 180)
AngleDiff# = AngleDiff# - 360
endwhile
YRotate Object 1,Object Angle Y(1) - (AngleDiff#/20)
EndFunction
Function ConSystemInk()
BaddieID = Combatant
`RED
if Enemies(BaddieID).Rage+Enemies(BaddieID).Grace+Enemies(BaddieID).Brains > (Player.Rage+Player.Grace+Player.Brains)
ink rgb(255,0,0),0
else
`YELLOW
if Enemies(BaddieID).Rage+Enemies(BaddieID).Grace+Enemies(BaddieID).Brains > ((Player.Rage+Player.Grace+Player.Brains)*0.6)
ink rgb(255,255,0),0
else
`BLUE
if Enemies(BaddieID).Rage+Enemies(BaddieID).Grace+Enemies(BaddieID).Brains > ((Player.Rage+Player.Grace+Player.Brains)*0.4)
ink rgb(0,0,255),0
else
`PALE BLUE
if Enemies(BaddieID).Rage+Enemies(BaddieID).Grace+Enemies(BaddieID).Brains < ((Player.Rage+Player.Grace+Player.Brains)*0.4)
ink rgb(180,180,255),0
endif
endif
endif
endif
EndFunction
Function Level()
Player.Level = Player.Level+1
Player.Rage = Player.Rage+rnd(10)+5
Player.Grace = Player.Grace+rnd(10)+5
Player.Brains = Player.Brains+rnd(10)+5
Player.MaxHP = Player.MaxHP+rnd(10)+10
Player.HP = Player.MaxHP
Scale Object 1,Player.MaxHP,Player.MaxHP,Player.MaxHP
Color Object 1,rgb(Player.Rage,Player.Grace,Player.Brains)
Player.XP=Player.XP-(100*(Player.Level-1))
EndFunction
Function BattleTimer()
if Loopy = 0
Loopy = 400
endif
if Loopy>0
Loopy = Loopy - 1
endif
if Loopy > 250
ink rgb(0,255,0),0
else
if Loopy > 100
ink rgb(255,255,0),0
else
if Loopy > 50
ink rgb(255,128,0),0
else
if Loopy < 51
ink rgb(255,0,0),0
endif
endif
endif
endif
box (screen width()/2)-Loopy/2,screen height()-45,(screen width()/2)+Loopy/2,screen height()-30
ink rgb(255,255,255),0
EndFunction
Function DamageBaddie()
BaddieID = Combatant
If Attack = 1
damage = Player.Rage
Enemies(BaddieID).HP = Enemies(BaddieID).HP - damage
set cursor screen width()/2,screen height()/2
endif
If Attack = 2
damage = (Player.Grace/2)*rnd(3)
if damage <1 then damage=1
Enemies(BaddieID).HP = Enemies(BaddieID).HP - damage
set cursor screen width()/2,screen height()/2
endif
If Attack = 3
damage =(Player.Brains)/1.5
if damage <1 then damage=1
Enemies(BaddieID).HP = Enemies(BaddieID).HP - damage
Player.HP=Player.HP+damage
if Player.HP>Player.MaxHP then Player.HP=Player.MaxHP
set cursor screen width()/2,screen height()/2
endif
if Attack = 4
damage = 1
Player.HP = Player.HP + (Player.Brains*2)
if Player.HP>Player.MaxHP
Player.HP=Player.MaxHP
endif
endif
if Attack = 5
damage = Player.Grace/2+Enemies(BaddieID).Grace
Enemies(BaddieID).HP = Enemies(BaddieID).HP - damage
endif
if Attack = 6
chance = rnd(2)
if chance <=1 then damage = 0
if chance >1 then damage = Player.Rage*2+10
Enemies(BaddieID).HP = Enemies(BaddieID).HP- damage
endif
if Attack > 0
TextureFloater()
DamageFloat=500
Attack = 0
Player.HP=Player.HP-(Enemies(BaddieID).Rage/2)
endif
`if Player.HP<1
` KillPlayer()
`endif
if Enemies(BaddieID).HP < 1
KillBaddie()
endif
EndFunction
Function MakeFloater()
create bitmap 1,32,32
set current bitmap 0
make object plain 300,10,10
set object 300,1,1,0,1,0
hide object 300
EndFunction
Function TextureFloater()
set current bitmap 1
ink 0,0
box 0,0,32,32
ink rgb(128,0,0),0
circle 16,16,10
circle 16,16,9
ink rgb(255,0,0),0
center text 17,9,STR$(damage)
ink rgb(255,255,255),0
get image 400,0,0,32,32
set current bitmap 0
texture object 300,400
EndFunction
Function DamageFloater()
if FloatTime > 0
a = object position x(300)
b# = object position y(300)+0.3
c = object position z(300)
position object 300,a,b#,c
point object 300,camera position X(),camera position Y(),camera position Z()
FloatTime = FloatTime-1
endif
if FloatTime = 0
Hide Object 300
endif
EndFunction
--------------------------------------- -
InterFoxSOFT #26 Persze, mert csak 3D shooterek vannak a világon, annyira unom már, hogy az összes Magyar PC buzi FPS-t akar csinálni... -
#25 már megoldodott már csak egy magyar oktato leirás kellene hogy hogyan kezdjek neki. -
#24 Siasztok!
Segitségre lenne szügségem megvan a darkbasicpro,de a telepités után kéri hogy tegyem be a lemezt és hiába teszem be a daemont toolsba mindig a valos meghajton keresi és igy nem indul el.Ez is valamilyen védelemmel van ellátva vagy van hozzá crack? -
#23 a dark basic 3d gyorsabb vagy a truevision3d visual basicben??????
ugyértem játék futtatásnál -
#22 anyád!! ez nem ide való kötsög!! -
Tikic #21 Valaki küldje már el nekem a Delta Force Task Force Dagger telepítőkódját,mert a www.serials.ws oldal vírusos és nem tudtam letölteni! -
berdi #20 Hello
Mi az az e-donkey? -
#19 Ja és berdi probálkozz e-donkeyn de ezt nem én mondtam :) -
#18 Hát a Dark Basic Pro az enyhén durvább mint a sima kezeli a DX 9-et és amit azzal lehet csinálni közel van a mostani játékokhoz még le is szárnyal egy párat a tudádából és ezt onnan tudom h nekem is megvan :) -
berdi #17 Hello
Meg tudnátok mondani honnan szerezhetném meg a Dark Basicot?
-
orkenyid #16 dehogynem adtak csak az ma már nem számít profi grafikájúnak
Ph03niXx:ajánlom a darkedit-et vagy a professionalt. -
#15 SZVSZ elég elfogadható teljesítményt nyújt. Sajnálom, hogy a kezelőfelülete olyan amilyen, egy ilyen progit máshogy is be lehetne csomagolni... De azért jó.
-
#14 "de az igez hogy profi 3d shootert vagy valami komolyabb jatekot nem lehet vele csinalni mert pl csak directx 6-os."
Mer, a DX 6.0 koraban nem adtak ki eleg sok profi shootert, ami hasznalta? -
Emmegki #13 #8: kezdetben 10x annyit szenvedsz vele, a grafika feleannyira lesz jó. Értem... Nem professzionális felhasználásra tervezték, tehát a DB-zők nem pénzért fejlesztenek nagy projekteket 2-3 évig. -
Emmegki #12 Nem click'n'play játékfejlesztő program hülye gémergyerekeknek, hanem egy programnyelv (semmi objektumorientáltság, Qbasic irányvonal). A sima dark basic dx7-es, a Dark basic pro dx9-es. Ez támogat egy adag effektet: bump mapping, mindenfajta shader, árnyékok, lehet animált textúrát csinálni, de kamerát is be lehet állítani textúrának. Eladható játékot lehet benne összehozni (persze nem kell csúcs grafikára számítani, kb Q3 szinten van a motor. Ja, támogatja a külső dll-eket is. -
orkenyid #11 azer nem egy click&create szarsag, mert szovegesen kell megirni a jatekot. de az igez hogy profi 3d shootert vagy valami komolyabb jatekot nem lehet vele csinalni mert pl csak directx 6-os. esetleg a proval. -
GixEr #10 A virtools sem elhanyagolhato, www.virtools.com -
#9 Egyetertek, de inkabb c/c++ :^)
Egyebkent ez a DB nekem egy amolyan click'ncreate szarsagnak tunik, egyszerubb jatekokat csinalhatsz vele, de egy profi 3D shootert soha. A Myst-et is valami ilyensmivel csinaltak mintha... -
Devla #8 Tobbre mesz vele ha megtanulsz valami normalis programnyelvet, mint python vagy java. Persze, tovabb tart de penzt is lehet keresni vele. -
#7 ragames
red-planet -
#6 Mi az a darkbasic?
A DarkBASIC egy könnyen kezelhető, 3D alkalmazások készítésére is alkalmas basic programnyelv. A parancsok működése teljesen magától értetődő, használatához nincs szükség programozói ismeretekre. Bővebb információkért látogass el az ajánlott oldalak valamelyikére! -
#5 Magyar DarkBasic Játékfejlesztőcsapatok
diedesign
dremphex
--------------------------------------------------------
Aki még tud , ugyanebben a formában írja be! -
nick név #4 nem értek hozzá de kedvet kaptam megnézni mi ez :)) -
#3 DarkBasical foglalkozó oldalak
Hivatalos DB PAGE
Hivatalos Magyar DB PAGE
-
#2 Sziasztok!Ugy láttam ilyen topic még nincs!
Há legyen! :)
Dark Basic Topic
Saját illetve más oldalakról való tutorialok,forráskódok!
MAGYARDB Fejlesztőcsapatok munkái,honlapjai!
ÉS MINDEN AMI DARK BASIC!!!! -
nick név #1 #1