PDA

Voir la version complète : GOO God of Optylus


steph
25/04/2005, 01h01
Bonjour Je bosse sur un projet depuis un bon moment, il est relativement abouti, du moins assé pour que je commence à chercher un modeleur capable de m'animer les perso du jeu, donc si vous etes intéressé contactez moi.

Il sagit d'un RPG

vous trouverez une version ancienne de GOO ici (http://www.zelphira.com/optylus/goo/goo.rar)

je vous met quelques screens dessous.

http://www.zelphira.com/optylus/goo/images/big09.jpg
le commerce
http://www.zelphira.com/optylus/goo/images/big10.jpg
les discutions
http://www.zelphira.com/optylus/goo/images/big05.jpg
dans une des villes
http://www.zelphira.com/optylus/goo/images/big08.jpg
une boutique de magie

vous trouverez d'autres screens ici : http://www.zelphira.com/optylus/goo
Si vous voulez decouvrir le monde d'optylus : http://www.zelphira.com/optylus

Merci à vous

lulu
25/04/2005, 07h17
c'est tros joli,goo,moi je suis fan,j'ai deja telecharge et joue avec cette version...

ploof
25/04/2005, 11h45
C'est tres beau !
Mais attention aux fautes d'orthographes dans le jeu ! (On peut en voir dans le dialogue entre les deux personnages par exemple)

steph
25/04/2005, 13h57
Et oui l'orthogrpahe c'est mon gros point faible, mais une fois le jeu terminée, une gentille ame charitable passera par là pour tout corriger ;)

Maxcmoi
25/04/2005, 18h27
Salut,
Ton jeu est vraiment génial je ne savais pas qu'on pouvait faire quelque chose d'aussi bien avec DB Pro. Félicitation et bonne continuation pour ton projet. Seulement combien de temps ta t-il falu pour arriver ou tu en est?

chaos
25/04/2005, 18h43
la veritable limite de dbpro c'est l'utilisateur :p

steph
25/04/2005, 18h45
Salut,
Ton jeu est vraiment génial je ne savais pas qu'on pouvait faire quelque chose d'aussi bien avec DB Pro. Félicitation et bonne continuation pour ton projet. Seulement combien de temps ta t-il falu pour arriver ou tu en est?

merci.

Pour la partie Prog ça fait 1 an que j'ai DBpro donc 1 an sinon entre le scenar, les quêtes, les model, etc... ça va faire bientot 3 ans

Maxcmoi
25/04/2005, 19h50
Ton jeu m'interesse vraiment j'aimerais savoir combien de polygones il mets a l'ecran et les fps si ca ne te derange pas. Moi aussi je fais un jeu du meme genre avec mon frere voila le site officiel (http://www.deusgames.be.tf).

mais il n'en est pas encore a ce niveau la et tu m'épatte vraiment a part les animations je ne vois vraiment rien a redire peut etre un paysage un peu lunaire avec peu de collines.Mais sinon tt est parfait. Quel taille a ta carte? Et surtout la tu fais en plusieurs morceau ou en une grande carte. car moi quand je charge ma carte il y 300000 polygons a l'ecran et je ne sais pas comment faire pour changer cela.Si tu pouvais me dire comment tu fais je t'en serai vraiment reconnaisant.

Bonne continuation et soit sertain que tu as trouve un client pour la version complete de ton jeu.

steph
25/04/2005, 22h58
pour limiter le nombre d'objet à l'ecran je fais comme ceci :

tout mes objets sont referencé dans un tableau
autour de mon perso principal je cré une sphere de x de diametre qui represente la zone visible.
ensuite je passe tout mes objet en revue et test une colision entre eux et la sphere si ils sont en colision je les montre (show object) sinon je les caches (hide object) pour les gros gros objets (genre ville entiere) je les supprime carement et les recrés quand ils sont dans la zone visible.

Pour le FPS je l'ai bloqué à 30 afin que le jeu soit jouable sur un max de machine

autre petit truc important pour la viesse tout les objets multiples qui ne sont pas soumis à colision ou mouvement sont des instances, pour les autres c'est des clones, je ne sais pas trop comment tu as fais tes arbres par exemple, mais il n'est pas utile de tester une colision avec le feuillage par exemple, donc tu peux diviser ton arbres en deux parti le tronc qui sera un clone et le feuillage une instance.

pour les colisions c'est pareil je cré une sphere de colision autour du perso, puis je test une colision grossiere entre les objets et cette sphere et si il y a colision je teste alors une colision plus poussée.

Voilà le principe

pour la carte elle est faite en une seule fois, enfin pour cette version, pour l'autre version il y aura 12 carte de la taille de celle-ci qui seront chargées independament.

math89
26/04/2005, 14h14
Pour ton systeme, dbpro le fait automatiquement. Il ne supprime pas les objets mais ne les affiches pas quand il sont en dehors de l'ecran.

Si tu n'es pas sur la version 5.8, tu peux faire un petit test : crée une sphere et scale la de 200. Tournes la camera de facon a avoir la sphere dans un coin et surprise ! elle disparait alors qu'elle devrait etre affichée. Ce bug vient du fait que la boite englobante des objets n'est pas mise a jour avec scale object. Il met bien en evidence le fait que les objets se cachent quand ils n'ont plus besoin d'etre affichés.

Sinon, quelques conseils pour ameliorer le jeu :

- Ne pas calculer pick object (je pense que c comme ca que tu fais la selection des personnages) a chaque boucle, fais le juste a chaque click.

If mouseclick()=1
if mouse=0
mouse=1
pick object()
endif
else
mouse=0
endif

Ce petit code oblige a lacher la souris avant de pouvoir recommencer a selectionner.

- Je sais pas si ca a été fait, mais le must pour un jeu, c'est la temporisation : au lieu de baser la vitesse jeu sur le sync rate, base le sur le timer. Tu pourras avoir un fps beaucoup plus haut sans alterer la vitesse du jeu.

Voila un petit exemple de jeu basé sur le timer. Ce genre de jeu aurai été impossible a jouer s'il etait basé sur les boucles : 1 joueur + 9 alliés contre 100 ennemis avec 80 de fps ;)



randomize timer()
sync on
set display mode 640,480,32

rem sync rate
rate#=100
rem frequence
s#=(1000.0/rate#)

global delta#

rem texture des bombes
for x=0 to 32
for y=0 to 32
ink rgb(255,128+rnd(127),0),0 : dot x,y
next y
next x
get image 1,0,0,32,32
rem texture du sol
for x=0 to 32
for y=0 to 32
ink rgb(0,32+rnd(64),0),0 : dot x,y
next y
next x
get image 2,0,0,32,32


make matrix 1,10000,10000,50,50 : prepare matrix texture 1,2,1,1
randomize matrix 1,100 : update matrix 1

tours=10
global bullets:global delai:global life
bullets=10
delai=750
life=bullets*delai

rem Tours
dim tour(tours)
dim x(tours)
dim y(tours)
dim z(tours)
dim ax#(tours):dim ay#(tours)
dim delai#(tours)
dim current(tours)
dim vies(tours)
dim target(tours)
dim time(tours)


dim bullet(tours,bullets)
dim life#(tours,bullets)

rem Ennemis
ennemis=100
dim ennemi(ennemis)
dim ex(ennemis)
dim ey(ennemis)
dim ez(ennemis)
dim vitesse(ennemis)
dim bombe(ennemis)
dim explode(ennemis)
dim mort(ennemis)
dim fini(ennemis)

for o=1 to tours
vies(o)=100
tour(o)=free_obj()
make object sphere tour(o),100
x(o)=rnd(8000)+1000:z(o)=rnd(8000)+1000:y(o)=get ground height(1,x(o),z(o))+50
position object tour(o),x(o),y(o),z(o)
ay#(o)=rnd(360)
current(o)=1
for b=1 to bullets
bullet(o,b)=free_obj()
make object cube bullet(o,b),10 : color object bullet(o,b),rgb(0,0,255) : set object light bullet(o,b),0
next b
next o

for e=1 to ennemis
ennemi(e)=free_obj()
make object box ennemi(e),100,80,180
ex(e)=rnd(8000)+1000:ez(e)=-2000-rnd(8000):ey(e)=350+rnd(450)
position object ennemi(e),ex(e),ey(e),ez(e)
vitesse(e)=rnd(500)+800
bombe(e)=free_obj()
make object sphere bombe(e),40,6,6
next e


tour=1

start=timer():oldtime=start

fog on : fog distance 3500 : fog color 0 : set camera range 1,4000

ink rgb(192,192,192),0
set text font "arial",1

rem code pas con du tout trouvé sur le forum anglais
make memblock 1, 640*480*4+12
write memblock dword 1, 0, 640
write memblock dword 1, 4, 480
write memblock dword 1, 8, 32
for i=12 to (640*480*4+11) step 4
write memblock byte 1, i, 0 :`Blue
write memblock byte 1, i+1, 0 :`Green
write memblock byte 1, i+2, 0 :`Red
write memblock byte 1, i+3, 85 :`Alpha
next i
make image from memblock 100, 1
backdrop off

do

fps=screen fps()
mx#=mousemovex()+mx#
my#=mousemovey()+my#
mc=mouseclick()
tabu=keystate(15)

time=timer()

if time=>start+s#
paste image 100,0,0,1
set cursor 0,0 : print "fps : ",fps,"/",int(rate#)


delta#=(time-oldtime)/1000.0
oldtime=timer()

dist=(x#-x(tour))^2+(z#-z(tour))^2+(y#-y(tour))^2
x#=curvevalue(x#,x(tour),1.2):y#=curvevalue(y#,y(tour),1.2):z#=curvevalue(z#,z(tour),1.2)
ax#=curveangle(ax#,ax#(tour),1.5)
ay#=curveangle(ay#,ay#(tour),1.5)

amorts=0
rem si on est a l'interieur
if dist<10000
if vies(tour)>0
ax#(tour)=wrapvalue(ax#(tour)+my#*0.2)
ay#(tour)=wrapvalue(ay#(tour)+mx#*0.2)
if mc=1
shoot(tour)
endif
print "vies : ",vies(tour)
else
for b=1 to 20
y=rnd(480)
box 0,y,640,y+1
next b
endif
endif

rem TOURS
for t=1 to tours

rem IA des alliés
if vies(t)>0
if t<>tour


if time>time(t)+1000+rnd(1000)
value=rnd(1):time(t)=time
for en=1 to ennemis-1 step 2
e=en+value
dist#=(x(t)-ex(e))^2+(z(t)-ez(e))^2
if dist#<300000
target(t)=en : exit
else
target(t)=0
endif
next en

endif
if target(t)>0
point object tour(t),ex(target(t)),ey(target(t)),ez(target(t))+rnd(vitesse(target(t)))
ax#(t)=wrapvalue(object angle x(tour(t)))
ay#(t)=wrapvalue(object angle y(tour(t)))
shoot(t)
endif
endif
else
inc amorts
endif

rem Gestion des tirs
delai#(t)=delai#(t)-delta#*1000
for b=1 to bullets
if life#(t,b)>0
bu=bullet(t,b)
dec life#(t,b),delta#
for p=1 to 10
move object bu,delta#*100
bx=object position x(bu):by=object position y(bu):bz=object position z(bu)
for e=1 to ennemis
if fini(e)=0
if bx=>ex(e)-60 then if bx<=ex(e)+60
if by=>ey(e)-45 then if by<=ey(e)+45
if bz=>ez(e)-100 then if bz<=ez(e)+100
life#(t,b)=0 : mort(e)=1 :hide object bu : exit
endif
endif
endif
endif
next en
next p
endif
next b

next t
rem changement de tourelle
if tabu=1
if tab=0
tab=1 : inc tour
if tour>tours then tour=1
endif
else
tab=0
endif
position camera x#,y#,z# : rotate camera ax#,ay#,0

rem ENNEMIS
emorts=0
for e=1 to ennemis
if fini(e)=0
move object ennemi(e),delta#*vitesse(e)
ex(e)=object position x(ennemi(e)):ey(e)=object position y(ennemi(e))-mort(e)*delta#*450:ez(e)=object position z(ennemi(e))
if mort(e)>0 then roll object right ennemi(e),(-1)^(e)
if ez(e)=>12000 then ez(e)=0-rnd(2000)
if ey(e)<get ground height(1,ex(e),ey(e)) then ey(e)=get ground height(1,ex(e),ey(e)) : fini(e)=1 : hide object bombe(e)
position object ennemi(e),ex(e),ey(e),ez(e)

px=object position x(bombe(e)):pz=object position z(bombe(e))
py=object position y(bombe(e))
if py<=get ground height(1,px,pz)
if explode(e)<=400
if explode(e)=0
ghost object on bombe(e) : texture object bombe(e),1 : set object light bombe(e),0
for t=1 to tours
bdist=(x(t)-px)^2+(z(t)-pz)^2
if bdist<=30000
dec vies(t),30+rnd(25)
if vies(t)<=0 then color object tour(t),0
endif
next t
scale object bombe(e),400,400,400
else
if explode(e)=>380 then if object visible(bombe(e))=1 then hide object bombe(e)
endif
inc explode(e),delta#*1250
else
if rnd(100)=0
position object bombe(e),ex(e),ey(e),ez(e):scale object bombe(e),100,100,100
ghost object off bombe(e):color object bombe(e),rgb(255,255,255) : set object light bombe(e),1
explode(e)=0:show object bombe(e)
endif
endif
else
position object bombe(e),px,py-delta#*750,pz+delta#*vitesse(e)
endif
else
inc emorts
endif
next e

print emorts," ennemi(s) ont été tués"
print amorts, " allié(s) sont morts"


rem fin de la boucle
mx#=0 : my#=0
sync
start=time
endif
loop

function shoot(tour)
if delai#(tour)<=0
delai#(tour)=delai
b=bullet(tour,current(tour))
position object b,x(tour),y(tour),z(tour):rotate object b,ax#(tour),ay#(tour),0
move object down b,5 : move object b,20
life#(tour,current(tour))=life
delai#(tour)=delai:show object b
inc current(tour)
if current(tour)>bullets then current(tour)=1
endif
endfunction

function free_obj()
for o=1 to 65535
if object exist(o)=0 then exit
next o
endfunction o



Enfin voila, bonne chance et bonne continuation pour ton projet :)

steph
26/04/2005, 15h41
Tiens Math89 (le roi du FPS) tu vas bien?
Oui j'ai resolu ce problème lors du click souris (par contre je n'utilise pas pick object il faudra que je regarde cette fonction voir) ceci est une ancienne version, la nouvelle est beaucoup plus rapide et plus optimisé et depuis la 5.8 de 3dcpro c'est en plain ecran :), je vais creuser l'idée du timer voir (tu as utilisé cette méthode dans ton clone de doom?, tiens au fait tu devrais en faire une présentation ici)

math89
27/04/2005, 14h20
non non, je l'avais pas utilisé, je connaissait pas encore trop cette methode. Pour l'impletner maintenant, il faudrait presque tout recommencer :(.

steph
28/04/2005, 10h33
non non, je l'avais pas utilisé, je connaissait pas encore trop cette methode. Pour l'impletner maintenant, il faudrait presque tout recommencer :(.
c'est ce que je me disait pour GOO, celui - ci étant casi fini il reste juste la 3D à terminée et certains perso, mais pour la version II je vais essayer voir

skorpio640
22/05/2005, 13h46
Salut steph, :00000023:

je travaille moi aussi sur un projet en ce moment (un MMORPG) avec un autre moteur qu'Ogre, mais je suis bon en orthographe et sa me désole de voir des fautes d'orthographes ^^

Ce que je te propose, c'est de corriger les dialogues ; tu me les fournis sous .doc ou .txt, tu organises tout, je corrige les fautes, et je te renvoie le fichier :00000025:

Tu peux me l'envoyer à l'adresse dragonlords@hotmail.fr, cette adresse fait aussi office de messagerie MSN (mais je suis un peu surbooké en ce moment)

Sinon, je te félicites pour le travail accompli, les screens rendent très bien, je me demandais si sa existait des projets en darkbasic aussi abouti, et c'est le seul que j'ai vu :00000001: pratiquement...

PS : moi aussi je programmais en darkbasic, et je n'ai jamais réussi à faire un ciel potable, lol ^^

PS2 : tu en es ou actuellement de ton jeu ? Et sinon pourrais tu mettre en plein écran ^^ ? Le perso marche trop leentement, je trouve... Par contre il court très vite ^^

Amicalement,
Skorpio640, le correcteur ambulant ^^

Aranoth
22/05/2005, 16h57
On voit le travail sur ces screens (par contre pour les dialogues... :00000021: c'est pas humain autant de fautes :00000015: )

A part ca bon boulot et bonne chance pour la suite ;)

skorpio640
22/05/2005, 18h42
Sinon je suis aussi intéressé par les animations des persos, j'ai tout le matos et l'envie de me tester dessus (je suis débutant en la matière, mais avec les modèles déjà fait, pas de probs à animer...), donc si les modèles sont différents de "l'ancienne" version de GOO, dis le moi rapidement... ^^ :00000015:

steph
15/06/2005, 18h05
pour les dialogues des npc ils ne sont pas encore finalisés , mais je pense que dés que cela sera fait ton aide seras la bienvenue :). Là je viens de refaire tout l'editeur pour tout gérer depuis celui-ci (décors, npc, monstres, objets, effets, quêtes, etc...) donc la partie n'a pas évolué, mais l'éditeur étant casi fini (juste une bricole à droite à gauche) ça va repartir à fond, le temps de créer quelques décors en 3D.

Par contre de nombreuses modif sont déjà en place mais pas dispo en téléchargement (le jeu est en plein écran, les effets de magies sont là, le jeu est plus fuilde, et les colisions meilleures)