Mars 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | Calendrier |
|
| | Générateur / editeur de donjon (les débuts) | |
| | |
Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Sam 3 Déc 2011 - 23:25 | |
| Bonjour, j'ai bossé un peu sur le programme, bon, il y a encore 2 "bugs": - un dans la détection des combats quand on bouge qui n'est pas top - je pensais pouvoir bloquer les déplacements du monstres pendant le combat, mais je dois faire une erreur logique Sinon, le programme a une structure un peu bizzare car je l'ai rassemblé à partir des 4 includes que j'avais fait pour faciliter la mise au point. Une fois que le moteur de combat sera parfaitement au point, je remettrait le programme sous la forme du programme principale e de ses 4 includes - Code:
-
' ****************************************************************************** ' ****************************************************************************** ' ********************** DONJONS V3.0 par Jicehel ************************** ' *********** basé sur: LABYRINTHE 3D version 12 (Créé par Bignono) ********** ' ******************* EN BASIC PANORAMIC le 03/12/11 *********************** ' ****************************************************************************** ' ******************************************************************************
label moteur, termine
scene3d 1 : full_space 1:light_position 0,1500,0 3d_skybox 1 3d_load_texture_back 1,"Decors\canyon_back.jpg" : 3d_load_texture_front 1,"Decors\canyon_front.jpg" 3d_load_texture_left 1,"Decors\canyon_left.jpg" : 3d_load_texture_right 1,"Decors\canyon_right.jpg" 3d_load_texture_top 1,"Decors\canyon_top.jpg" 3d_plane 2:3d_scale 2,500,500,1:3d_x_rotate 2,90:3d_y_position 2,0 3d_u_tile 2,500: 3d_v_tile 2,500 : 3d_load_texture 2,"Decors\sol.bmp" 3d_cube 3,1:3d_cube 4,1:3d_hide 3:3d_hide 4: ' CRÉATION DES VÉHICULES MOTEUR ET CAMÉRA
' ----------------------------- ' Declaration monstrueuse dim X_monstre(3), Y_monstre(3), dir_monstre(3), h_monstre(3), Cpt_monstre, mgd, mpt, Combat
' Déclaration des étiquettes label Mvt_Monstre, MD1, MD2, MD3, MD4, Fin_monstre, Init_monstre, Init_combat
' Création des monstres Cpt_monstre = 0 : 3d_mesh 5 : 3d_hide 5: 3d_load_object 5, "Monstres\skeleton.3ds" 3d_X_rotate 5,90: 3d_scale 5,10,10,10 ' 3d_mesh 6 : 3d_hide 6: 3d_load_object 6, "Monstres\dragon-red.3DS" ' 3d_X_rotate 6,90:3d_scale 6,0.0003,0.0005,0.0005 goto Fin_monstre
' procédures Init_monstre:
h_monstre(1)= 0 X_monstre(1) = int(rnd(h))+1 : Y_monstre(1) = int(rnd(v))+1
if bin_and(a(X_monstre(1),Y_monstre(1)),8) = 0 dir_monstre(1)=1 else if bin_and(a(X_monstre(1),Y_monstre(1)),1) = 0 dir_monstre(1)=2 else if bin_and(a(X_monstre(1),Y_monstre(1)),2) = 0 dir_monstre(1)=3 else if bin_and(a(X_monstre(1),Y_monstre(1)),4) = 0 dir_monstre(1) = 4 else dir_monstre(1) = 0 end_if end_if end_if end_if
' X_monstre(2) = 2: Y_monstre(2) = 1 : dir_monstre(2) = 1 3d_position 5, X_monstre(1)*pas_trace,h_monstre(1), Y_monstre(1)*pas_trace: 3d_show 5 ' 3d_position 6, X_monstre(2)*pas_trace,0, Y_monstre(2)*pas_trace: 3d_show 6 return
Mvt_Monstre:
Cpt_monstre=0 : timer_off 2 if fin = 1 combat = 0 if gagne = 1 Hide 300 : fin=0 ' message "Gagne !!" gosub init_monstre else Hide 300 : fin = 0 message "Vous êtes mort ..." goto termine end_if else if combat = 0 select dir_monstre(1)
case 0 if ((x_monstre(1) = i) and (Y_monstre(1) = j)) then gosub init_combat
case 1 3d_z_rotate 5,0 mgd=Y_monstre(1)*pas_trace:Y_monstre(1)=Y_monstre(1)+1:mpt=Y_monstre(1)*pas_trace if ((x_monstre(1) = i) and (Y_monstre(1) = j)) then gosub init_combat repeat mgd=mgd+pas::3d_position 5,X_monstre(1)*pas_trace,h_monstre(1),mgd until mgd>=mpt gosub MD1
case 2 3d_z_rotate 5,270 mgd=X_monstre(1)*pas_trace:X_monstre(1)=X_monstre(1)-1:mpt=X_monstre(1)*pas_trace repeat mgd=mgd-pas:3d_position 5,mgd,h_monstre(1),Y_monstre(1)*pas_trace until mgd<=mpt gosub MD2
case 3 3d_z_rotate 5,180 mpt=Y_monstre(1)*pas_trace:Y_monstre(1)=Y_monstre(1)-1:mgd=Y_monstre(1)*pas_trace if ((x_monstre(1) = i) and (Y_monstre(1) = j)) then gosub init_combat repeat mpt=mpt-pas:3d_position 5,X_monstre(1)*pas_trace,h_monstre(1),mpt until mgd>=mpt gosub MD3
case 4 3d_z_rotate 5,90 mpt=X_monstre(1)*pas_trace:X_monstre(1)=X_monstre(1)+1:mgd=X_monstre(1)*pas_trace if ((x_monstre(1) = i) and (Y_monstre(1) = j)) then gosub init_combat repeat mpt=mpt+pas:3d_position 5,mpt,h_monstre(1),Y_monstre(1)*pas_trace until mpt>=mgd gosub MD4 end_select end_if end_if
if debug > 0 caption 525, "Monstre: x = "+ str$(X_monstre(1)) + " : Y= " + str$(Y_monstre(1)) + " : a(x,y) = " + str$(a(X_monstre(1),Y_monstre(1))) + " dir_monstre = "+ STR$(dir_monstre(1))+ " " ' if X_monstre(1) > H or Y_monstre(1) > V ' Message "Monstre: x= "+ str$(X_monstre(1)) + " : Y= " + str$(Y_monstre(1)) + " : a(x,y) = " + str$(a(X_monstre(1),Y_monstre(1))) + " dir_monstre = "+ STR$(dir_monstre(1)) ' end_if end_if if combat = 0 then timer_on 2 return
MD1:
select a(X_monstre(1),Y_monstre(1)) case 0 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=2 end_if
case 1 if int(rnd(10)) > 4 dir_monstre(1)=4 else dir_monstre(1)=1 end_if
case 4 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=2 end_if
case 8 if int(rnd(10)) > 4 dir_monstre(1)=4 else dir_monstre(1)=2 end_if
case 9 if int(rnd(10)) > 3 dir_monstre(1)=4 else dir_monstre(1)=3 end_if
case 12 if int(rnd(10)) > 3 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
case 13 dir_monstre(1)=3
end_select return
MD2:
select a(X_monstre(1),Y_monstre(1))
case 0 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
case 1 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=3 end_if
case 2 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=2 end_if
case 3 dir_monstre(1)=1
case 8 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
case 9 dir_monstre(1)=3
case 10 if int(rnd(10)) > 3 dir_monstre(1)=2 else dir_monstre(1)=4 end_if
case 11 dir_monstre(1)=4
end_select return
MD3:
select a(X_monstre(1),Y_monstre(1))
case 0 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=4 end_if
case 1 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=1 end_if
case 2 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=4 end_if
case 3 if int(rnd(10)) > 3 dir_monstre(1)=4 else dir_monstre(1)=1 end_if
case 4 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
case 5 if int(rnd(10)) > 3 dir_monstre(1)=3 else dir_monstre(1)=1 end_if
case 6 if int(rnd(10)) > 3 dir_monstre(1)=2 else dir_monstre(1)=1 end_if
case 7 dir_monstre(1)=1
case 8 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
end_select return
MD4:
select a(X_monstre(1),Y_monstre(1))
case 0 if int(rnd(10)) > 4 dir_monstre(1)=4 else dir_monstre(1)=1 end_if
case 2 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=4 end_if
case 4 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=1 end_if
case 6 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=2 end_if
case 8 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=4 end_if
case 10 if int(rnd(10)) > 3 dir_monstre(1)=4 else dir_monstre(1)=2 end_if
case 12 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=2 end_if
case 14 dir_monstre(1)=2
end_select return
Init_combat: 3d_Hide 5 : Timer_off 2: EnnemiSelectionne = 1 : gosub NouveauCombat return
Fin_monstre:
' -----------------------------
dim c_gauche,c_droite,c_avant,espace,pas,pasv,pas_trace dim ang,d,dtn,gd,h,v,i,j,k,pt,rot,w, a(30,30),debug
' Initialisation des chaines de caractères dim Chemin$ : Chemin$ = "C:\temp" : ' Chemin de base du programme dim F_level$, Chaine$ : F_level$ = Chemin$ + "\level.dat" : ' Fichier de data du niveau
label affiche,droite,gauche,pan1,pan2,pan4,pan8,pivot,trace, charge_laby, fin_laby
dim texture_mur1 : texture_mur1 = 101 : image texture_mur1: file_load texture_mur1,"Decors\mur1.bmp" dim texture_mur2 : texture_mur2 = 102 : image texture_mur2: file_load texture_mur2,"Decors\mur2.bmp" dim texture_mur3 : texture_mur3 = 103 : image texture_mur3: file_load texture_mur3,"Decors\mur3.bmp" dim texture_mur4 : texture_mur4 = 105 : image texture_mur4: file_load texture_mur4,"Decors\mur4.bmp"
' ****************************************************************************** ' ************************ INITIALISATION DES VARIABLES ************************ ' ****************************************************************************** ' ** h et v représentent les dimensions du labyrinthe (vous pouvez les modifier, ' mais plus le labyrinthe est grand, plus le programme ralentit!) ************** ' ****** pas : sert à règler la vitesse de déplacement dans le labyrinthe ****** ' ****** pasv: sert à règler la vitesse du zoom vertical ***********************
debug = 1
if debug > 0 v = 22 form 520: width 520, 400 : height 520, (V+5) * 17: top 520, 0 : left 520,800 for i = 1 to 30 alpha 520 + i: parent 520 + i,520: height 520 + i, 17 : top 520 + i, (17*i) - 14 : left 520 + i,3 next i end_if
gosub charge_laby d=1:w=4:espace=0:c_gauche=0:c_droite=0:c_avant=0: pas=1:pasv=2 : pas_trace = 8
' ****************************************************************************** ' **************** CONSTRUCTION DU LABYRINTHE EN 3D *********************** ' ******************************************************************************
' CAS 1 = MUR GAUCHE, CAS 2 = MUR ARRIÈRE, CAS 4 = MUR DROIT, CAS 8 = MUR FACE ' LES AUTRES CAS, C'EST UNE ADDITION; EX: CAS 3 = CAS 1 + CAS 2 for j=0 to v+1 for i=0 to h+1 select a(i,j) case 1: if i=h+1 then gosub pan1: ' mur de gauche (G) case 2: if j=v+1 then gosub pan2: ' mur du bas (B) case 4: gosub pan4 : ' mur de droite (D) case 5: gosub pan4 : ' G+D case 6: gosub pan4 : ' B+D case 7: gosub pan4 : ' G+B+D (cul de sac en u) case 8: gosub pan8 : ' mur du haut (H) case 9: gosub pan8 : ' G+H case 10: gosub pan8 : ' B+H case 11: gosub pan8 : ' G+B+H (cul de sac en [) case 12: gosub pan4:gosub pan8 : ' D+H case 13: gosub pan4:gosub pan8 : ' G+D+H (cul de sac en n) case 14: gosub pan4:gosub pan8 : ' B+D+H (cul de sac en ]) case 15: gosub pan4:gosub pan8 : ' Tout fermé [] end_select next i next j ' ****************************************************************************** goto fin_laby
' ****************************************************************************** ' ********************* LES ROUTINES *********************************** ' ******************************************************************************
' CALCUL DES POSITIONS DES VÉHICULES MOTEUR ET CAMÉRA affiche: 3d_position 4,o3d_x_position(3),o3d_y_position(3),o3d_z_position(3):3d_rotate 4,o3d_x_rotate(3),o3d_y_rotate(3),o3d_z_rotate(3) 3d_move 4,1:cam_position o3d_x_position(3),w,o3d_z_position(3):point_position o3d_x_position(4),4,o3d_z_position(4) return
' CRÉATION DES MURS DU LABYRINTHE : Vous pouvez supprimer les 3d_color et mettre ' à la place un 3d_load_texture si vous voulez habillez les murs!!! pan1: 3d_box number_3d_objects+1,pas_trace-0.02,10,1:3d_position number_3d_objects,i*pas_trace-pas_trace/2,4,j*pas_trace 3d_y_rotate number_3d_objects,90: 3d_image_texture number_3d_objects, texture_mur1 return pan2: 3d_box number_3d_objects+1,pas_trace,10,1:3d_position number_3d_objects,i*pas_trace,4,j*pas_trace - pas_trace/2 3d_image_texture number_3d_objects, texture_mur4 return pan4: 3d_box number_3d_objects+1,pas_trace-0.02,10,1:3d_position number_3d_objects,i*pas_trace+pas_trace/2,4,j*pas_trace 3d_y_rotate number_3d_objects,90:3d_image_texture number_3d_objects, texture_mur2 return pan8: 3d_box number_3d_objects+1,pas_trace,10,1:3d_position number_3d_objects,i*pas_trace,4,j*pas_trace + pas_trace/2 3d_image_texture number_3d_objects, texture_mur3 return
' VISION DE HAUT DU LABYRINTHE EN 3D trace: repeat w=w+pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=70
repeat if scancode=27 then goto termine if scancode=37 then gosub gauche if scancode=39 then gosub droite Cpt_monstre = Cpt_monstre + 1: If Cpt_monstre = 5 then gosub Mvt_Monstre wait 200 until scancode=32
repeat w=w-pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=4 espace=0 goto moteur
' ROTATION A GAUCHE gauche: ang=rot+90:dtn=dtn+1:if dtn>4 then dtn=1 repeat rot=rot+6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot>=ang c_gauche=0 return
' ROTATION A DROITE droite: ang=rot-90:dtn=dtn-1:if dtn<1 then dtn=4 repeat rot=rot-6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot<=ang c_droite=0 return
' ROTATION DE LA CAMÉRA LORS DE LA VISION DE HAUT pivot: cam_position o3d_x_position(3),o3d_y_position(3)+w,o3d_z_position(3) return
charge_laby:
FILE_OPEN_READ 50, F_level$ for i = 1 to 3 : File_readln 50, chaine$ : Next i File_readln 50, chaine$ H = val(Left$ (Chaine$,2)) V = val(Right$(Chaine$,2)) File_Readln 50, chaine$: File_Readln 50, chaine$ for j=0 to V+1 ' if debug > 0 then Caption 521 + j,Chaine$ chaine$=Right$(Chaine$, len(Chaine$) - 1) i=0 while len(chaine$) > 2 a(i,j)=val(Left$(Chaine$,2)) chaine$=Right$(Chaine$, len(Chaine$) - 3) i=i+1 end_while File_Readln 50, chaine$ next j file_close 50 return
fin_laby:
' -----------------------------
' ici toutes les variables comunues a plusieurs modules ' plus tard les sub et fonctions générales
dim Nb_Monstres, Nb_armes, Tour, XPLevelUp, XPdeBase, MultiplicateurXP, CalculXP dim EnnemiSelectionne, PVEnnemi
Nb_Monstres = 10 : Nb_armes = 10 : XPdeBase = 5 : MultiplicateurXP = 1.6
' carracteristiques perso dim hero(20) : ' Tableau stockant les caractéristiques du héro hero(1) = 12 : ' 1 => force (3D6): puissance du héros hero(2) = 9 : ' 2 => dexterité (3D6): habileté à toucher et rapidité d'action hero(3) = 15 : ' 3 => constitution (3D6): résistance du héros hero(4) = 4 : ' 4 => puissance magique (3D6): capacité a faire de la magie hero(5) = 7 : ' 5 => niveau du heros hero(6) = 1 : ' 6 => arme équipée (0: rien, 1: dague, 2: épée, 3: arc, ...) hero(7) = (((hero(3)-5)*3) +1) : ' 7 => Nb de points de vie hero(8) = (((hero(4)-5)*3) +1) : ' 8 => Nb de points de mana hero(9) = 100: ' 9 => nombre de point d'expérience hero(10) = 30: ' 10 => capacité du héro à l'arme blanche (max 100%) hero(11) = 40: ' 11 => capacité du héro à l'arc
dim nom_ennemi$(Nb_Monstres) , ennemi(Nb_Monstres,7)
nom_ennemi$(1)="gobelin des collines" ennemi(1,1) = 10 : ' 1 => force ennemi(1,2) = 8 : ' 2 => dextérité ennemi(1,3) = 12 : ' 3 => constitution ennemi(1,4) = 0 : ' 4 => puissance magique ennemi(1,5) = 7 : ' 5 => niveau de l'ennemi (comme le heros pour les tests) ennemi(1,6) = 1 : ' 6 => arme équipée (dague) ennemi(1,7) = (((ennemi(1,3) - 5) * 3) +1) : ' 7 => Nb de point de vie
dim nom_arme$(Nb_armes), arme(Nb_armes,6)
' Définition de la dague nom_arme$(1)="dague" arme(1,2)= 100 : ' 2 => Precision de l'arme arme(1,3)= 6 : ' 3 => Dégats de l'arme arme(1,4)= 0 : ' 4 => Gène occasionnée par l'arme arme(1,5)= 0 : ' 5 => Protection apportée par l'arme arme(1,6)= 20 : ' 6 => Prix de l'arme
' Définition de l'épée nom_arme$(2)="épée" arme(2,2)= 80 : ' 2 => Precision de l'arme arme(2,3)= 9 : ' 3 => Dégats de l'arme arme(2,4)= 15 : ' 4 => Gène occasionnée par l'arme arme(2,5)= 0 : ' 5 => Protection apportée par l'arme arme(2,6)= 200 : ' 6 => Prix de l'arme
' ----------------------------- ' ici tout ce qui est specifique au combat
' Definition des étiquettes label Action_hero, Action_ennemi, fin_combat label sub_hero_attaque, sub_hero_magie, sub_enemmi_attaque, NouveauCombat
' Définition des variables dim quiCommence, ChanceToucher, JetDes, Degats, fin, gagne
' Initiailisation de la fenêtre de combat form 300: hide 300 : Combat = 0 width 300 ,800 : height 300,600 :' Définition de la fenêtre principale
' grand rectangle PICTURE 303: PARENT 303, 300 : WIDTH 303, 750: HEIGHT 303, 400 : COLOR 303,128,128,128 2d_target_is 303 : ' cible 2d
' mechant 2d_fill_color 250,0,0 : 2d_rectangle 150,200,200,350
' heros 2d_fill_color 0,0,250 : 2d_rectangle 600,200,650,350
' petit recangle PICTURE 304 : parent 304, 300 : TOP 304, 410: LEFT 304, 0: WIDTH 304, 750: HEIGHT 304, 150 : COLOR 304,255,128,128 2d_target_is 304 : 2d_rectangle 10,10,250,140 : 2d_rectangle 300,10,550,140
' textes a l'ecran alpha 310: parent 310, 300 : left 310,13 :top 310,425:caption 310,"points de vie Hero : " + str$(hero(7)) alpha 311: parent 311, 300 : left 311,313:top 311,425:caption 311,"points de vie Ennemi : " + str$(ennemi(1,7)) alpha 312: parent 312, 300 : parent 310, 300 : left 312,13 :top 312,470:caption 312,"attaque :" alpha 314: parent 314, 300 : left 314,313:top 314,450:caption 314,"Ennemi: Aucun" alpha 323: parent 323, 300 : left 323,580:top 323,425 alpha 324: parent 324, 300 : left 324,580:top 324,450
' texte de commentaires sur le combat alpha 313: parent 313, 300 :left 313,13:top 313,20 : font_size 313,12 : caption 313,"" alpha 315: parent 315, 300 :left 315,13:top 315,42 : font_size 315,12 : caption 315,"" alpha 316: parent 316, 300 :left 316,13:top 316,64 : font_size 316,12 : caption 316,"" alpha 317: parent 317, 300 :left 317,13:top 317,86 : font_size 317,12 : caption 317,"" alpha 318: parent 318, 300 :left 318,13:top 318,108: font_size 318,12 : caption 318,""
' declaration et positionnement des options option 321 : parent 321, 300 : top 321,450:left 321,80:caption 321,"ATTAQUER" option 322 : parent 322, 300 : top 322,470:left 322,80:caption 322,"MAGIE" ' option 323 : parent 323, 300 : top 23,490:left 23,100:caption 23,"ARC LONG"
' boutton pour valider le type d'attaque button 330 : parent 330, 300 : top 330,510:left 330,80: width 330,150 : caption 330,"VALIDER SELECTION" on_click 330,Action_hero
' boutton pour valider le type d'attaque button 331 : parent 331, 300 : top 331,510:left 331,313: width 331,150 : caption 331,"ATTAQUE DE L'ENNEMI" on_click 331, Action_ennemi
' inactive les bouttons inactive 330 : inactive 331 : wait 300
goto fin_combat
NouveauCombat: show 300 caption 313,"Début du combat entre le héro est un "+ nom_ennemi$(EnnemiSelectionne) caption 314,"Ennemi: " + nom_ennemi$(EnnemiSelectionne) quiCommence = int((rnd(10)*10+rnd(10)) - (rnd(10)*10+rnd(10)) + (hero(2) * 5) - (ennemi(EnnemiSelectionne,2)) * 5) Tour = 0 : XPLevelUp = ((hero(5) + 50)* Power(hero(5)+1,2)) PVEnnemi = ennemi(EnnemiSelectionne,7) caption 323,"XP : " + right$("00000000"+str$(hero(9)),8) caption 324,"XP niv suivant :" + right$("00000000"+str$(XPLevelUp),8) caption 315,"Rouge : Héro / Bleu : "+nom_ennemi$(EnnemiSelectionne) ' quiCommence = 1 et c'est le hero qui commence sinon c'est l'ennemi if quiCommence > 0 caption 316,"Le héro commence le combat" active 330 else caption 316,"Le "+nom_ennemi$(EnnemiSelectionne) +" commence le combat" gosub Action_ennemi end_if return
' ---------- FONCTIONS ---------- ' Action_hero:
if checked(321) = 1 or checked(322) = 1
Tour = Tour + 1 caption 313, "Tour en cours : "+str$(Tour) caption 317, "": caption 318,""
' test l'option choise if checked(321) = 1 caption 315,"Le héro attaque avec " + nom_arme$(hero(6)) ' Affiche le nom de l'arme dont est équipé le héro gosub sub_hero_attaque end_if
if checked(322) = 1 ' message "magie" caption 315,"Le héro attaque avec de la magie" gosub sub_hero_magie end_if
caption 310,"points de vie Hero : " + str$(hero(7)) caption 311,"points de vie Ennemi : " + str$(PVEnnemi)
' lance le tour de l'enemi inactive 330 if PVEnnemi > 0 ' active 31 gosub Action_ennemi else if hero(5) <= ennemi(EnnemiSelectionne,5) CalculXP = hero(5)-1-ennemi(EnnemiSelectionne,5) CalculXP = (0-CalculXP)*XPdeBase else CalculXP = int(ennemi(EnnemiSelectionne,5) - hero(5) +2)/MultiplicateurXP*XPdeBase+1 If CalculXP <=0 Then CalculXP=1 end_if hero(7) = (((hero(3)-5)*3) +1) hero(9) = hero(9) + int(CalculXP * Power(ennemi(EnnemiSelectionne,5),2)) fin=1: gagne=1 end_if end_if return
Action_ennemi: ' inactive 31 gosub sub_enemmi_attaque if hero(7) > 0 active 330 else fin=1: gagne=0 end_if caption 310,"points de vie Hero : " + str$(hero(7)) caption 311,"points de vie Ennemi : " + str$(PVEnnemi)
return
' -- Attaque avec une arme --------------------------------------------------- sub_hero_attaque:
' calculer s'il y a blessure ChanceToucher = int(((hero(2)* 4 + hero(4)*4) /2) + rnd(35)) ' Caption 21,"ATTAQUER ("+str$(ChanceToucher)+"%)" JetDes = int(rnd(10))*10 + int(rnd(10)) : ' simule lancer de 2 D 10 faces ' message "chancetoucher " + str$(ChanceToucher) + " jetdes " + str$(jetdes) if JetDes < ChanceToucher ' si blessure , calculer les dédats selon l'arme utilisée (pas de gestion de l'armure pour le moment) Degats = int((1 + (hero(1)-5)/4) * rnd(arme(hero(6),3))) + 1 ' int((1 + hero(2)/4) * rnd(arme(hero(6),3))) caption 316, "ennemi bléssé pv perdus : " + str$(Degats) PVEnnemi = PVEnnemi - Degats else caption 316,"L'ennemi n'a pas été touché" end_if
return
' -- Attaque avec la magie --------------------------------------------------- sub_hero_magie:
' calculer s'il y a blessure ChanceToucher = int((hero(2)* 5 + hero(10)) /2) * (arme(hero(6),2)/100) Caption 321,"MAGIE ("+str$(ChanceToucher)+"%)" JetDes = int(rnd(10))*10 + int(rnd(10)) : ' simule lancer de 2 D 10 faces
if JetDes < ChanceToucher ' si blessure , calculer les dédats (pas de gestion des sorts pour le moment) Degats = int((1 + (hero(2)-5)/4) * rnd(arme(hero(6),3))) + 1 caption 316,"Ennemi blessé - PV perdus : " + str$(Degats) PVEnnemi = PVEnnemi - Degats else caption 316, "L'ennemi n'a pas été touché" end_if
return
' -- Attaque de l'ennemi ----------------------------------------------------- sub_enemmi_attaque:
' calculer s'il y a blessure ChanceToucher = int(((ennemi(EnnemiSelectionne,2)* 4 + ennemi(EnnemiSelectionne,4) *4)/2) + rnd(25)) JetDes = int(rnd(10))*10 + int(rnd(10)) : ' simule lancer de 2 D 10 faces caption 317,"Le " + nom_ennemi$(EnnemiSelectionne) +" attaque avec " + nom_arme$(Ennemi(EnnemiSelectionne,6)) if JetDes < ChanceToucher ' si blessure , calculer les dégats selon l'arme utilisée (pas de gestion de l'armure pour le moment)
Degats = int( (1 + (ennemi(EnnemiSelectionne,1)-5)/4) * rnd(arme(ennemi(EnnemiSelectionne,6),3))) + 1 Caption 318,"Héro blessé - PV perdus : " + str$(Degats) hero(7) = hero(7) - Degats else Caption 318,"Le héro n'a pas été touché" end_if
return
fin_combat:
' ****************************************************************************** ' ** Initialisation position de départ et création d'un timer pour gérer les ** ' * déplacements. Si le programme plante augmentez la valeur du timer_interval * ' ****************************************************************************** i=1:j=1 : dtn = 1 Gosub init_monstre 3d_position 3,i*pas_trace,4,j*pas_trace:gosub affiche timer 2:timer_interval 2,200:on_timer 2,moteur end
' ****************************************************************************** ' ***************** LE PROGRAMME PRINCIPAL ****************************** ' ****************************************************************************** moteur: timer_off 2 if debug > 0 show 520 caption 521, "Boucle moteur" caption 522, "Etat des touches: Espace:" + str$(espace) + " Gauche : " + str$(c_gauche) + " Droite : " + str$(c_droite) + " " caption 523, "dtn = " + str$(dtn) + " : i (dep. laéral) = " + str$(i) + " : j (dép vertical) = "+str$(j) caption 524, "test dtn="+ str$(dtn) +" => a(i,j) = "+str$(a(i,j)) caption 525, "Monstre: x = "+ str$(X_monstre(1)) + " : Y= " + str$(Y_monstre(1)) + " : a(x,y) = " + str$(a(X_monstre(1),Y_monstre(1))) + " dir_monstre = "+ STR$(dir_monstre(1))+ " " end_if if espace=1 then goto trace if c_gauche=1 then gosub gauche if c_droite=1 then gosub droite if c_avant=1 if dtn=1 and j < v if debug > 1 then caption 524, "test dtn=1 avec j<v+1 => a(i,j) = "+str$(a(i,j)) if a(i,j) < 8 pt=j*pas_trace:j=j+1:gd=j*pas_trace repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>=gd end_if end_if
if dtn=2 and i < h and j > 0 if debug > 1 then caption 524, "test dtn=2 avec i<h et j > 1 => a(i,j) = "+str$(a(i,j)) if a(i,j)<4 or a(i,j)>7 and a(i,j)<12 pt=i*pas_trace:i=i+1:gd=i*pas_trace repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>=gd end_if end_if
if dtn=3 and j > 0 if debug > 1 then caption 524, "test dtn=3 avec j > 2 => a(i,j) = "+str$(a(i,j)) if a(i,j)=0 or a(i,j)=1 or a(i,j)=4 or a(i,j)=5 or a(i,j)=8 or a(i,j)=9 or a(i,j)=12 or a(i,j)=13 pt=j*pas_trace:j=j-1:gd=j*pas_trace repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>=pt end_if end_if
if dtn=4 and i > 1 and j > 0 if debug > 1 then caption 524, "test dtn=4 avec i > 2 => a(i,j) = "+str$(a(i,j)) if odd(a(i,j))=0 pt=i*pas_trace:i=i-1:gd=i*pas_trace repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>=pt end_if end_if c_avant=0 end_if
select scancode case 27:goto termine: ' SORTIE PROGRAMME case 32:espace=1: ' AFFICHAGE DU PLAN DU LABYRINTHE case 37:c_gauche=1: ' FLECHE GAUCHE = ROTATION A GAUCHE case 39:c_droite=1: ' FLECHE DROITE = ROTATION A DROITE case 38:c_avant=1: ' FLECHE HAUT = DTN DEFINIT LA DIRECTION NORD, OUEST, SUD OU EST end_select
3d_position 3, i*pas_trace,4,j*pas_trace
' TEST DE SORTIE DU LABYRINTHE ' if j=v+1 ' beep_exclamation:message "BRAVO, VOUS ETES SORTI DU LABYRINTHE!":goto termine ' end_if
Cpt_monstre = Cpt_monstre + 1: If Cpt_monstre = 5 then gosub Mvt_Monstre
if combat = 0 then timer_on 2
return
' SORTIE DU PROGRAMME termine: timer_off 2 terminate | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Lun 5 Déc 2011 - 2:58 | |
| J'ai travaillé cette nuit sur les "monstres" en 3D Du coup, je ne colle pas le code, il est à peine changé et se trouve dans le zip: donjons.zipDonc, les objets 3D ajoutés sont dans le répertoire monstres Dans ce répertoire figure un fichier texte (paramètres_objets.txt) qui contient les lignes à modifier dans Explore_Donjon-v3b.bas Contenu du fichier : paramètres_objets.txt - Code:
-
3d_mesh 5 : 3d_hide 5 ' puis selon le monstre:
' Squelette angle_monstre(1) = 0: h_monstre(1)= 0 3d_load_object 5, "Monstres\skeleton.3ds" : 3d_color 5,10,10,10 3d_X_rotate 5,90 : 3d_scale 5,10,10,10
' Cobra angle_monstre(1) = 270: h_monstre(1)= 0 3d_load_object 5, "Monstres\cobra.md2": 3d_load_texture 5,"Monstres\cobra.jpg" 3d_X_rotate 5,90 : 3d_scale 5,0.1,0.1,0.08
' Dragon angle_monstre(1) = 0: h_monstre(1)= 0 3d_load_object 5, "Monstres\dragon-red.3DS" : 3d_color 5,50,10,10 3d_X_rotate 5,90:3d_scale 5,0.0003,0.0005,0.0005
' Aigle angle_monstre(1) = 270: h_monstre(1)= 5 3d_load_object 5, "Monstres\eagle.md2" : 3d_load_texture 5,"Monstres\eagle.jpg" 3d_X_rotate 5,90:3d_Z_rotate 5,angle_monstre(1): 3d_scale 5,0.1,0.1,0.1
' Singe angle_monstre(1) = 270: h_monstre(1)= 0 3d_load_object 5, "Monstres\monkey.md2": 3d_load_texture 5,"Monstres\brute.jpg" 3d_X_rotate 5,90 : 3d_scale 5,0.1,0.07,0.08
' Imp (monstre marron à pointe) angle_monstre(1) = 270: h_monstre(1)= 0 3d_load_object 5, "Monstres\imp.md2" : 3d_load_texture 5,"Monstres\imp.jpg" 3d_X_rotate 5,90 : 3d_scale 5,0.06,0.06,0.07
' Revenant angle_monstre(1) = 270: h_monstre(1)= 0 3d_load_object 5, "Monstres\revenant.md2" : 3d_load_texture 5,"Monstres\revenant.jpg" 3d_X_rotate 5,90 : 3d_scale 5,0.06,0.06,0.09
' Serpent angle_monstre(1) = 270: h_monstre(1)= 0 3d_load_object 5, "Monstres\snake.md2" : 3d_load_texture 5,"Monstres\snake.jpg" 3d_X_rotate 5,90 : 3d_scale 5,0.08,0.1,0.12
' Guerrier Humain en pagne angle_monstre(1) = 270: h_monstre(1)= 0 3d_load_object 5, "Monstres\warrior.md2" : 3d_load_texture 5,"Monstres\warrior.jpg" 3d_X_rotate 5,90 : 3d_scale 5,0.07,0.07,0.07
' Orc - Grunt (problème d'affichage) angle_monstre(1) = 0: h_monstre(1)= 0 3d_load_object 5, "Monstres\3dm-Grunt.3ds" 3d_X_rotate 5,90 : 3d_scale 5,0.04,0.05,0.048
' *********************************** ' Non utilisé (moderne)
' Cyber deamon angle_monstre(1) = 270: h_monstre(1)= 0 3d_load_object 5, "Monstres\Cyber.md2" : 3d_load_texture 5,"Monstres\Cyber.jpg" 3d_X_rotate 5,90 : 3d_scale 5,0.04,0.04,0.04
| |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Mar 6 Déc 2011 - 2:14 | |
| Bon, je mets juste une petite modif du code pour bloquer les déplacements (monstres / perso) et améliorer la détection des combats. Bon, prochaine étape, améliorer le "graphisme" de l'affichage des combats pour la rendre un peu plus sexy... - Code:
-
' ****************************************************************************** ' ****************************************************************************** ' ********************** DONJONS V3.0 par Jicehel ************************** ' *********** basé sur: LABYRINTHE 3D version 12 (Créé par Bignono) ********** ' ******************* EN BASIC PANORAMIC le 03/12/11 *********************** ' ****************************************************************************** ' ******************************************************************************
label moteur, termine
scene3d 1 : full_space 1:light_position 0,1500,0 3d_skybox 1 3d_load_texture_back 1,"Decors\canyon_back.jpg" : 3d_load_texture_front 1,"Decors\canyon_front.jpg" 3d_load_texture_left 1,"Decors\canyon_left.jpg" : 3d_load_texture_right 1,"Decors\canyon_right.jpg" 3d_load_texture_top 1,"Decors\canyon_top.jpg" 3d_plane 2:3d_scale 2,500,500,1:3d_x_rotate 2,90:3d_y_position 2,0 3d_u_tile 2,500: 3d_v_tile 2,500 : 3d_load_texture 2,"Decors\sol.bmp" 3d_cube 3,1:3d_cube 4,1:3d_hide 3:3d_hide 4: ' CRÉATION DES VÉHICULES MOTEUR ET CAMÉRA
' ----------------------------- ' Declaration monstrueuse dim X_monstre(3), Y_monstre(3), dir_monstre(3), h_monstre(3), Cpt_monstre, mgd, mpt, Combat dim angle_monstre(3)
' Déclaration des étiquettes label Mvt_Monstre, MD1, MD2, MD3, MD4, Fin_monstre, Init_monstre, Init_combat
' Création des monstres Cpt_monstre = 0 : 3d_mesh 5 : 3d_hide 5 angle_monstre(1) = 270: h_monstre(1)= 0 3d_load_object 5, "Monstres\revenant.md2" : 3d_load_texture 5,"Monstres\revenant.jpg" 3d_X_rotate 5,90 : 3d_scale 5,0.06,0.06,0.09
goto Fin_monstre
' procédures Init_monstre:
X_monstre(1) = int(rnd(h))+1 : Y_monstre(1) = int(rnd(v))+1
if bin_and(a(X_monstre(1),Y_monstre(1)),8) = 0 dir_monstre(1)=1 else if bin_and(a(X_monstre(1),Y_monstre(1)),1) = 0 dir_monstre(1)=2 else if bin_and(a(X_monstre(1),Y_monstre(1)),2) = 0 dir_monstre(1)=3 else if bin_and(a(X_monstre(1),Y_monstre(1)),4) = 0 dir_monstre(1) = 4 else dir_monstre(1) = 0 end_if end_if end_if end_if
' X_monstre(2) = 2: Y_monstre(2) = 1 : dir_monstre(2) = 1 3d_position 5, X_monstre(1)*pas_trace,h_monstre(1), Y_monstre(1)*pas_trace: 3d_show 5 ' 3d_position 6, X_monstre(2)*pas_trace,0, Y_monstre(2)*pas_trace: 3d_show 6 return
Mvt_Monstre:
Cpt_monstre=0 : timer_off 2 if fin = 1 combat = 0 if gagne = 1 Hide 300 : fin=0 ' message "Gagne !!" gosub init_monstre else Hide 300 : fin = 0 message "Vous êtes mort ..." goto termine end_if else if combat = 0 select dir_monstre(1)
case 0 if ((x_monstre(1) = i) and (Y_monstre(1) = j)) then gosub init_combat
case 1 3d_z_rotate 5,angle_monstre(1) mgd=Y_monstre(1)*pas_trace:Y_monstre(1)=Y_monstre(1)+1:mpt=Y_monstre(1)*pas_trace if ((x_monstre(1) = i) and (Y_monstre(1) = j)) then gosub init_combat repeat mgd=mgd+pas::3d_position 5,X_monstre(1)*pas_trace,h_monstre(1),mgd until mgd>=mpt gosub MD1
case 2 k = angle_monstre(1) + 270 : if k > 360 then k=k-360 3d_z_rotate 5, k mgd=X_monstre(1)*pas_trace:X_monstre(1)=X_monstre(1)-1:mpt=X_monstre(1)*pas_trace repeat mgd=mgd-pas:3d_position 5,mgd,h_monstre(1),Y_monstre(1)*pas_trace until mgd<=mpt gosub MD2
case 3 k = angle_monstre(1) + 180 : if k > 360 then k=k-360 3d_z_rotate 5,k mpt=Y_monstre(1)*pas_trace:Y_monstre(1)=Y_monstre(1)-1:mgd=Y_monstre(1)*pas_trace if ((x_monstre(1) = i) and (Y_monstre(1) = j)) then gosub init_combat repeat mpt=mpt-pas:3d_position 5,X_monstre(1)*pas_trace,h_monstre(1),mpt until mgd>=mpt gosub MD3
case 4 k = angle_monstre(1) + 90 : if k > 360 then k=k-360 3d_z_rotate 5,k mpt=X_monstre(1)*pas_trace:X_monstre(1)=X_monstre(1)+1:mgd=X_monstre(1)*pas_trace if ((x_monstre(1) = i) and (Y_monstre(1) = j)) then gosub init_combat repeat mpt=mpt+pas:3d_position 5,mpt,h_monstre(1),Y_monstre(1)*pas_trace until mpt>=mgd gosub MD4 end_select end_if end_if
if debug > 0 caption 525, "Monstre: x = "+ str$(X_monstre(1)) + " : Y= " + str$(Y_monstre(1)) + " : a(x,y) = " + str$(a(X_monstre(1),Y_monstre(1))) + " dir_monstre = "+ STR$(dir_monstre(1))+ " " ' if X_monstre(1) > H or Y_monstre(1) > V ' Message "Monstre: x= "+ str$(X_monstre(1)) + " : Y= " + str$(Y_monstre(1)) + " : a(x,y) = " + str$(a(X_monstre(1),Y_monstre(1))) + " dir_monstre = "+ STR$(dir_monstre(1)) ' end_if end_if if combat = 0 then timer_on 2 return
MD1:
select a(X_monstre(1),Y_monstre(1)) case 0 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=2 end_if
case 1 if int(rnd(10)) > 4 dir_monstre(1)=4 else dir_monstre(1)=1 end_if
case 4 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=2 end_if
case 8 if int(rnd(10)) > 4 dir_monstre(1)=4 else dir_monstre(1)=2 end_if
case 9 if int(rnd(10)) > 3 dir_monstre(1)=4 else dir_monstre(1)=3 end_if
case 12 if int(rnd(10)) > 3 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
case 13 dir_monstre(1)=3
end_select return
MD2:
select a(X_monstre(1),Y_monstre(1))
case 0 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
case 1 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=3 end_if
case 2 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=2 end_if
case 3 dir_monstre(1)=1
case 8 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
case 9 dir_monstre(1)=3
case 10 if int(rnd(10)) > 3 dir_monstre(1)=2 else dir_monstre(1)=4 end_if
case 11 dir_monstre(1)=4
end_select return
MD3:
select a(X_monstre(1),Y_monstre(1))
case 0 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=4 end_if
case 1 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=1 end_if
case 2 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=4 end_if
case 3 if int(rnd(10)) > 3 dir_monstre(1)=4 else dir_monstre(1)=1 end_if
case 4 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
case 5 if int(rnd(10)) > 3 dir_monstre(1)=3 else dir_monstre(1)=1 end_if
case 6 if int(rnd(10)) > 3 dir_monstre(1)=2 else dir_monstre(1)=1 end_if
case 7 dir_monstre(1)=1
case 8 if int(rnd(10)) > 4 dir_monstre(1)=2 else dir_monstre(1)=3 end_if
end_select return
MD4:
select a(X_monstre(1),Y_monstre(1))
case 0 if int(rnd(10)) > 4 dir_monstre(1)=4 else dir_monstre(1)=1 end_if
case 2 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=4 end_if
case 4 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=1 end_if
case 6 if int(rnd(10)) > 4 dir_monstre(1)=1 else dir_monstre(1)=2 end_if
case 8 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=4 end_if
case 10 if int(rnd(10)) > 3 dir_monstre(1)=4 else dir_monstre(1)=2 end_if
case 12 if int(rnd(10)) > 4 dir_monstre(1)=3 else dir_monstre(1)=2 end_if
case 14 dir_monstre(1)=2
end_select return
Init_combat: 3d_Hide 5 : Timer_off 2: EnnemiSelectionne = 1 : gosub NouveauCombat return
Fin_monstre:
' -----------------------------
dim c_gauche,c_droite,c_avant,espace,pas,pasv,pas_trace dim ang,d,dtn,gd,h,v,i,j,k,pt,rot,w, a(30,30),debug
' Initialisation des chaines de caractères dim Chemin$ : Chemin$ = "C:\temp" : ' Chemin de base du programme dim F_level$, Chaine$ : F_level$ = Chemin$ + "\level.dat" : ' Fichier de data du niveau
label affiche,droite,gauche,pan1,pan2,pan4,pan8,pivot,trace, charge_laby, fin_laby
dim texture_mur1 : texture_mur1 = 101 : image texture_mur1: file_load texture_mur1,"Decors\mur1.bmp" dim texture_mur2 : texture_mur2 = 102 : image texture_mur2: file_load texture_mur2,"Decors\mur2.bmp" dim texture_mur3 : texture_mur3 = 103 : image texture_mur3: file_load texture_mur3,"Decors\mur3.bmp" dim texture_mur4 : texture_mur4 = 105 : image texture_mur4: file_load texture_mur4,"Decors\mur4.bmp"
' ****************************************************************************** ' ************************ INITIALISATION DES VARIABLES ************************ ' ****************************************************************************** ' ** h et v représentent les dimensions du labyrinthe (vous pouvez les modifier, ' mais plus le labyrinthe est grand, plus le programme ralentit!) ************** ' ****** pas : sert à règler la vitesse de déplacement dans le labyrinthe ****** ' ****** pasv: sert à règler la vitesse du zoom vertical ***********************
debug = 1
if debug > 0 v = 22 form 520: width 520, 400 : height 520, (V+5) * 17: top 520, 0 : left 520,800 for i = 1 to 30 alpha 520 + i: parent 520 + i,520: height 520 + i, 17 : top 520 + i, (17*i) - 14 : left 520 + i,3 next i end_if
gosub charge_laby d=1:w=4:espace=0:c_gauche=0:c_droite=0:c_avant=0: pas=1:pasv=2 : pas_trace = 8
' ****************************************************************************** ' **************** CONSTRUCTION DU LABYRINTHE EN 3D *********************** ' ******************************************************************************
' CAS 1 = MUR GAUCHE, CAS 2 = MUR ARRIÈRE, CAS 4 = MUR DROIT, CAS 8 = MUR FACE ' LES AUTRES CAS, C'EST UNE ADDITION; EX: CAS 3 = CAS 1 + CAS 2 for j=0 to v+1 for i=0 to h+1 select a(i,j) case 1: if i=h+1 then gosub pan1: ' mur de gauche (G) case 2: if j=v+1 then gosub pan2: ' mur du bas (B) case 4: gosub pan4 : ' mur de droite (D) case 5: gosub pan4 : ' G+D case 6: gosub pan4 : ' B+D case 7: gosub pan4 : ' G+B+D (cul de sac en u) case 8: gosub pan8 : ' mur du haut (H) case 9: gosub pan8 : ' G+H case 10: gosub pan8 : ' B+H case 11: gosub pan8 : ' G+B+H (cul de sac en [) case 12: gosub pan4:gosub pan8 : ' D+H case 13: gosub pan4:gosub pan8 : ' G+D+H (cul de sac en n) case 14: gosub pan4:gosub pan8 : ' B+D+H (cul de sac en ]) case 15: gosub pan4:gosub pan8 : ' Tout fermé [] end_select next i next j ' ****************************************************************************** goto fin_laby
' ****************************************************************************** ' ********************* LES ROUTINES *********************************** ' ******************************************************************************
' CALCUL DES POSITIONS DES VÉHICULES MOTEUR ET CAMÉRA affiche: 3d_position 4,o3d_x_position(3),o3d_y_position(3),o3d_z_position(3):3d_rotate 4,o3d_x_rotate(3),o3d_y_rotate(3),o3d_z_rotate(3) 3d_move 4,1:cam_position o3d_x_position(3),w,o3d_z_position(3):point_position o3d_x_position(4),4,o3d_z_position(4) return
' CRÉATION DES MURS DU LABYRINTHE : Vous pouvez supprimer les 3d_color et mettre ' à la place un 3d_load_texture si vous voulez habillez les murs!!! pan1: 3d_box number_3d_objects+1,pas_trace-0.02,10,1:3d_position number_3d_objects,i*pas_trace-pas_trace/2,4,j*pas_trace 3d_y_rotate number_3d_objects,90: 3d_image_texture number_3d_objects, texture_mur1 return pan2: 3d_box number_3d_objects+1,pas_trace,10,1:3d_position number_3d_objects,i*pas_trace,4,j*pas_trace - pas_trace/2 3d_image_texture number_3d_objects, texture_mur4 return pan4: 3d_box number_3d_objects+1,pas_trace-0.02,10,1:3d_position number_3d_objects,i*pas_trace+pas_trace/2,4,j*pas_trace 3d_y_rotate number_3d_objects,90:3d_image_texture number_3d_objects, texture_mur2 return pan8: 3d_box number_3d_objects+1,pas_trace,10,1:3d_position number_3d_objects,i*pas_trace,4,j*pas_trace + pas_trace/2 3d_image_texture number_3d_objects, texture_mur3 return
' VISION DE HAUT DU LABYRINTHE EN 3D trace: repeat w=w+pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=70
repeat if scancode=27 then goto termine if scancode=37 then gosub gauche if scancode=39 then gosub droite
if Combat = 0 or fin=1 Cpt_monstre = Cpt_monstre + 1 If Cpt_monstre = 5 then gosub Mvt_Monstre end_if
wait 100
until scancode=32
repeat w=w-pasv:cam_position o3d_x_position(3),w,o3d_z_position(3):display until w=4 espace=0 goto moteur
' ROTATION A GAUCHE gauche: ang=rot+90:dtn=dtn+1:if dtn>4 then dtn=1 repeat rot=rot+6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot>=ang c_gauche=0 return
' ROTATION A DROITE droite: ang=rot-90:dtn=dtn-1:if dtn<1 then dtn=4 repeat rot=rot-6*pas:3d_y_rotate 3,rot:if w>4 then gosub pivot gosub affiche until rot<=ang c_droite=0 return
' ROTATION DE LA CAMÉRA LORS DE LA VISION DE HAUT pivot: cam_position o3d_x_position(3),o3d_y_position(3)+w,o3d_z_position(3) return
charge_laby:
FILE_OPEN_READ 50, F_level$ for i = 1 to 3 : File_readln 50, chaine$ : Next i File_readln 50, chaine$ H = val(Left$ (Chaine$,2)) V = val(Right$(Chaine$,2)) File_Readln 50, chaine$: File_Readln 50, chaine$ for j=0 to V+1 ' if debug > 0 then Caption 521 + j,Chaine$ chaine$=Right$(Chaine$, len(Chaine$) - 1) i=0 while len(chaine$) > 2 a(i,j)=val(Left$(Chaine$,2)) chaine$=Right$(Chaine$, len(Chaine$) - 3) i=i+1 end_while File_Readln 50, chaine$ next j file_close 50 return
fin_laby:
' -----------------------------
' ici toutes les variables comunues a plusieurs modules ' plus tard les sub et fonctions générales
dim Nb_Monstres, Nb_armes, Tour, XPLevelUp, XPdeBase, MultiplicateurXP, CalculXP dim EnnemiSelectionne, PVEnnemi
Nb_Monstres = 10 : Nb_armes = 10 : XPdeBase = 5 : MultiplicateurXP = 1.6
' carracteristiques perso dim hero(20) : ' Tableau stockant les caractéristiques du héro hero(1) = 12 : ' 1 => force (3D6): puissance du héros hero(2) = 9 : ' 2 => dexterité (3D6): habileté à toucher et rapidité d'action hero(3) = 15 : ' 3 => constitution (3D6): résistance du héros hero(4) = 4 : ' 4 => puissance magique (3D6): capacité a faire de la magie hero(5) = 7 : ' 5 => niveau du heros hero(6) = 1 : ' 6 => arme équipée (0: rien, 1: dague, 2: épée, 3: arc, ...) hero(7) = (((hero(3)-5)*3) +1) : ' 7 => Nb de points de vie hero(8) = (((hero(4)-5)*3) +1) : ' 8 => Nb de points de mana hero(9) = 100: ' 9 => nombre de point d'expérience hero(10) = 30: ' 10 => capacité du héro à l'arme blanche (max 100%) hero(11) = 40: ' 11 => capacité du héro à l'arc
dim nom_ennemi$(Nb_Monstres) , ennemi(Nb_Monstres,7)
nom_ennemi$(1)="Squelette animé" ennemi(1,1) = 10 : ' 1 => force ennemi(1,2) = 8 : ' 2 => dextérité ennemi(1,3) = 12 : ' 3 => constitution ennemi(1,4) = 0 : ' 4 => puissance magique ennemi(1,5) = 7 : ' 5 => niveau de l'ennemi (comme le heros pour les tests) ennemi(1,6) = 1 : ' 6 => arme équipée (dague) ennemi(1,7) = (((ennemi(1,3) - 5) * 3) +1) : ' 7 => Nb de point de vie
dim nom_arme$(Nb_armes), arme(Nb_armes,6)
' Définition de la dague nom_arme$(1)="dague" arme(1,2)= 100 : ' 2 => Precision de l'arme arme(1,3)= 6 : ' 3 => Dégats de l'arme arme(1,4)= 0 : ' 4 => Gène occasionnée par l'arme arme(1,5)= 0 : ' 5 => Protection apportée par l'arme arme(1,6)= 20 : ' 6 => Prix de l'arme
' Définition de l'épée nom_arme$(2)="épée" arme(2,2)= 80 : ' 2 => Precision de l'arme arme(2,3)= 9 : ' 3 => Dégats de l'arme arme(2,4)= 15 : ' 4 => Gène occasionnée par l'arme arme(2,5)= 0 : ' 5 => Protection apportée par l'arme arme(2,6)= 200 : ' 6 => Prix de l'arme
' ----------------------------- ' ici tout ce qui est specifique au combat
' Definition des étiquettes label Action_hero, Action_ennemi, fin_combat label sub_hero_attaque, sub_hero_magie, sub_enemmi_attaque, NouveauCombat
' Définition des variables dim quiCommence, ChanceToucher, JetDes, Degats, fin, gagne
' Initiailisation de la fenêtre de combat form 300: hide 300 : Combat = 0 width 300 ,800 : height 300,600 :' Définition de la fenêtre principale
' grand rectangle PICTURE 303: PARENT 303, 300 : WIDTH 303, 750: HEIGHT 303, 400 : COLOR 303,128,128,128 2d_target_is 303 : ' cible 2d
' mechant 2d_fill_color 250,0,0 : 2d_rectangle 150,200,200,350
' heros 2d_fill_color 0,0,250 : 2d_rectangle 600,200,650,350
' petit recangle PICTURE 304 : parent 304, 300 : TOP 304, 410: LEFT 304, 0: WIDTH 304, 750: HEIGHT 304, 150 : COLOR 304,255,128,128 2d_target_is 304 : 2d_rectangle 10,10,250,140 : 2d_rectangle 300,10,550,140
' textes a l'ecran alpha 310: parent 310, 300 : left 310,13 :top 310,425:caption 310,"points de vie Hero : " + str$(hero(7)) alpha 311: parent 311, 300 : left 311,313:top 311,425:caption 311,"points de vie Ennemi : " + str$(ennemi(1,7)) alpha 312: parent 312, 300 : parent 310, 300 : left 312,13 :top 312,470:caption 312,"attaque :" alpha 314: parent 314, 300 : left 314,313:top 314,450:caption 314,"Ennemi: Aucun" alpha 323: parent 323, 300 : left 323,580:top 323,425 alpha 324: parent 324, 300 : left 324,580:top 324,450
' texte de commentaires sur le combat alpha 313: parent 313, 300 :left 313,13:top 313,20 : font_size 313,12 : caption 313,"" alpha 315: parent 315, 300 :left 315,13:top 315,42 : font_size 315,12 : caption 315,"" alpha 316: parent 316, 300 :left 316,13:top 316,64 : font_size 316,12 : caption 316,"" alpha 317: parent 317, 300 :left 317,13:top 317,86 : font_size 317,12 : caption 317,"" alpha 318: parent 318, 300 :left 318,13:top 318,108: font_size 318,12 : caption 318,""
' declaration et positionnement des options option 321 : parent 321, 300 : top 321,450:left 321,80:caption 321,"ATTAQUER" option 322 : parent 322, 300 : top 322,470:left 322,80:caption 322,"MAGIE" ' option 323 : parent 323, 300 : top 23,490:left 23,100:caption 23,"ARC LONG"
' boutton pour valider le type d'attaque button 330 : parent 330, 300 : top 330,510:left 330,80: width 330,150 : caption 330,"VALIDER SELECTION" on_click 330,Action_hero
' boutton pour valider le type d'attaque button 331 : parent 331, 300 : top 331,510:left 331,313: width 331,150 : caption 331,"ATTAQUE DE L'ENNEMI" on_click 331, Action_ennemi
' inactive les bouttons inactive 330 : inactive 331 : wait 300
goto fin_combat
NouveauCombat: show 300 : Combat = 1 caption 313,"Début du combat entre le héro est un "+ nom_ennemi$(EnnemiSelectionne) caption 314,"Ennemi: " + nom_ennemi$(EnnemiSelectionne) quiCommence = int((rnd(10)*10+rnd(10)) - (rnd(10)*10+rnd(10)) + (hero(2) * 5) - (ennemi(EnnemiSelectionne,2)) * 5) Tour = 0 : XPLevelUp = ((hero(5) + 50)* Power(hero(5)+1,2)) PVEnnemi = ennemi(EnnemiSelectionne,7) caption 323,"XP : " + right$("00000000"+str$(hero(9)),8) caption 324,"XP niv suivant :" + right$("00000000"+str$(XPLevelUp),8) caption 315,"Rouge : Héro / Bleu : "+nom_ennemi$(EnnemiSelectionne) ' quiCommence = 1 et c'est le hero qui commence sinon c'est l'ennemi if quiCommence > 0 caption 316,"Le héro commence le combat" active 330 else caption 316,"Le "+nom_ennemi$(EnnemiSelectionne) +" commence le combat" gosub Action_ennemi end_if return
' ---------- FONCTIONS ---------- ' Action_hero:
if checked(321) = 1 or checked(322) = 1
Tour = Tour + 1 caption 313, "Tour en cours : "+str$(Tour) caption 317, "": caption 318,""
' test l'option choise if checked(321) = 1 caption 315,"Le héro attaque avec " + nom_arme$(hero(6)) ' Affiche le nom de l'arme dont est équipé le héro gosub sub_hero_attaque end_if
if checked(322) = 1 ' message "magie" caption 315,"Le héro attaque avec de la magie" gosub sub_hero_magie end_if
caption 310,"points de vie Hero : " + str$(hero(7)) caption 311,"points de vie Ennemi : " + str$(PVEnnemi)
' lance le tour de l'enemi inactive 330 if PVEnnemi > 0 ' active 31 gosub Action_ennemi else if hero(5) <= ennemi(EnnemiSelectionne,5) CalculXP = hero(5)-1-ennemi(EnnemiSelectionne,5) CalculXP = (0-CalculXP)*XPdeBase else CalculXP = int(ennemi(EnnemiSelectionne,5) - hero(5) +2)/MultiplicateurXP*XPdeBase+1 If CalculXP <=0 Then CalculXP=1 end_if hero(7) = (((hero(3)-5)*3) +1) hero(9) = hero(9) + int(CalculXP * Power(ennemi(EnnemiSelectionne,5),2)) fin=1: gagne=1 : timer_on 2 end_if end_if return
Action_ennemi: ' inactive 31 gosub sub_enemmi_attaque if hero(7) > 0 active 330 else fin=1: gagne=0 : timer_on 2 end_if caption 310,"points de vie Hero : " + str$(hero(7)) caption 311,"points de vie Ennemi : " + str$(PVEnnemi)
return
' -- Attaque avec une arme --------------------------------------------------- sub_hero_attaque:
' calculer s'il y a blessure ChanceToucher = int(((hero(2)* 4 + hero(4)*4) /2) + rnd(35)) ' Caption 21,"ATTAQUER ("+str$(ChanceToucher)+"%)" JetDes = int(rnd(10))*10 + int(rnd(10)) : ' simule lancer de 2 D 10 faces ' message "chancetoucher " + str$(ChanceToucher) + " jetdes " + str$(jetdes) if JetDes < ChanceToucher ' si blessure , calculer les dédats selon l'arme utilisée (pas de gestion de l'armure pour le moment) Degats = int((1 + (hero(1)-5)/4) * rnd(arme(hero(6),3))) + 1 ' int((1 + hero(2)/4) * rnd(arme(hero(6),3))) caption 316, "ennemi bléssé pv perdus : " + str$(Degats) PVEnnemi = PVEnnemi - Degats else caption 316,"L'ennemi n'a pas été touché" end_if
return
' -- Attaque avec la magie --------------------------------------------------- sub_hero_magie:
' calculer s'il y a blessure ChanceToucher = int((hero(2)* 5 + hero(10)) /2) * (arme(hero(6),2)/100) Caption 321,"MAGIE ("+str$(ChanceToucher)+"%)" JetDes = int(rnd(10))*10 + int(rnd(10)) : ' simule lancer de 2 D 10 faces
if JetDes < ChanceToucher ' si blessure , calculer les dédats (pas de gestion des sorts pour le moment) Degats = int((1 + (hero(2)-5)/4) * rnd(arme(hero(6),3))) + 1 caption 316,"Ennemi blessé - PV perdus : " + str$(Degats) PVEnnemi = PVEnnemi - Degats else caption 316, "L'ennemi n'a pas été touché" end_if
return
' -- Attaque de l'ennemi ----------------------------------------------------- sub_enemmi_attaque:
' calculer s'il y a blessure ChanceToucher = int(((ennemi(EnnemiSelectionne,2)* 4 + ennemi(EnnemiSelectionne,4) *4)/2) + rnd(25)) JetDes = int(rnd(10))*10 + int(rnd(10)) : ' simule lancer de 2 D 10 faces caption 317,"Le " + nom_ennemi$(EnnemiSelectionne) +" attaque avec " + nom_arme$(Ennemi(EnnemiSelectionne,6)) if JetDes < ChanceToucher ' si blessure , calculer les dégats selon l'arme utilisée (pas de gestion de l'armure pour le moment)
Degats = int( (1 + (ennemi(EnnemiSelectionne,1)-5)/4) * rnd(arme(ennemi(EnnemiSelectionne,6),3))) + 1 Caption 318,"Héro blessé - PV perdus : " + str$(Degats) hero(7) = hero(7) - Degats else Caption 318,"Le héro n'a pas été touché" end_if
return
fin_combat:
' ****************************************************************************** ' ** Initialisation position de départ et création d'un timer pour gérer les ** ' * déplacements. Si le programme plante augmentez la valeur du timer_interval * ' ****************************************************************************** i=1:j=1 : dtn = 1 Gosub init_monstre 3d_position 3,i*pas_trace,4,j*pas_trace:gosub affiche timer 2:timer_interval 2,200:on_timer 2,moteur end
' ****************************************************************************** ' ***************** LE PROGRAMME PRINCIPAL ****************************** ' ****************************************************************************** moteur: timer_off 2 if debug > 0 show 520 caption 521, "Boucle moteur" caption 522, "Etat des touches: Espace:" + str$(espace) + " Gauche : " + str$(c_gauche) + " Droite : " + str$(c_droite) + " " caption 523, "dtn = " + str$(dtn) + " : i (dep. laéral) = " + str$(i) + " : j (dép vertical) = "+str$(j) caption 524, "test dtn="+ str$(dtn) +" => a(i,j) = "+str$(a(i,j)) caption 525, "Monstre: x = "+ str$(X_monstre(1)) + " : Y= " + str$(Y_monstre(1)) + " : a(x,y) = " + str$(a(X_monstre(1),Y_monstre(1))) + " dir_monstre = "+ STR$(dir_monstre(1))+ " " end_if if fin=0 if espace=1 then goto trace if c_gauche=1 then gosub gauche if c_droite=1 then gosub droite if c_avant=1 if dtn=1 and j < v if debug > 1 then caption 524, "test dtn=1 avec j<v+1 => a(i,j) = "+str$(a(i,j)) if a(i,j) < 8 pt=j*pas_trace:j=j+1:gd=j*pas_trace repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>=gd end_if end_if
if dtn=2 and i < h and j > 0 if debug > 1 then caption 524, "test dtn=2 avec i<h et j > 1 => a(i,j) = "+str$(a(i,j)) if a(i,j)<4 or a(i,j)>7 and a(i,j)<12 pt=i*pas_trace:i=i+1:gd=i*pas_trace repeat pt=pt+pas:3d_move 3,pas:gosub affiche until pt>=gd end_if end_if
if dtn=3 and j > 0 if debug > 1 then caption 524, "test dtn=3 avec j > 2 => a(i,j) = "+str$(a(i,j)) if a(i,j)=0 or a(i,j)=1 or a(i,j)=4 or a(i,j)=5 or a(i,j)=8 or a(i,j)=9 or a(i,j)=12 or a(i,j)=13 pt=j*pas_trace:j=j-1:gd=j*pas_trace repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>=pt end_if end_if
if dtn=4 and i > 1 and j > 0 if debug > 1 then caption 524, "test dtn=4 avec i > 2 => a(i,j) = "+str$(a(i,j)) if odd(a(i,j))=0 pt=i*pas_trace:i=i-1:gd=i*pas_trace repeat gd=gd+pas:3d_move 3,pas:gosub affiche until gd>=pt end_if end_if c_avant=0 end_if end_if
if ((x_monstre(1) = i) and (Y_monstre(1) = j)) then gosub init_combat
select scancode case 27:goto termine: ' SORTIE PROGRAMME case 32:espace=1: ' AFFICHAGE DU PLAN DU LABYRINTHE case 37:c_gauche=1: ' FLECHE GAUCHE = ROTATION A GAUCHE case 39:c_droite=1: ' FLECHE DROITE = ROTATION A DROITE case 38:c_avant=1: ' FLECHE HAUT = DTN DEFINIT LA DIRECTION NORD, OUEST, SUD OU EST end_select
3d_position 3, i*pas_trace,4,j*pas_trace
' TEST DE SORTIE DU LABYRINTHE ' if j=v+1 ' beep_exclamation:message "BRAVO, VOUS ETES SORTI DU LABYRINTHE!":goto termine ' end_if
If Combat=0 or fin=1 Cpt_monstre = Cpt_monstre + 1 If Cpt_monstre = 5 then gosub Mvt_Monstre timer_on 2 End_if
return
' SORTIE DU PROGRAMME termine: timer_off 2 terminate | |
| | | bignono
Nombre de messages : 1127 Age : 66 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Mar 6 Déc 2011 - 7:12 | |
| bonjour Jicehel, Ça n'a pas l'air mal pour le moment. J'ai cependant une erreur qui se produit au bout d'un moment: "29 _ Not correct arithmetic expression_ Index overflow line 188." (comme j'ai rajouté une ligne, ce doit être la ligne 187 en réalité) Aussi, (juste une fois, pas tout le temps) après avoir fait la vision de haut, Mademoiselle le monstre avait disparu. Tu veux la garder pour toi? Hein, c'est ça, avoue! | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Mar 6 Déc 2011 - 8:01 | |
| Tu as tout compris Bon si vous avez des idées pour améliorer le programme, je suis preneur. Là, je vais essayer d'améliorer l'esttique de l'interface de combat (pour passer une temps encore plus agréable avec Mademoislle le Monstre)... Après maintenant que j'ai trouvé mon bonheur en objets / monstres dans Quake et ses add-ons et que j'ai compris comment les récupérer, j'aimerais pouvoir ajouter des décors et un moyen de les sauvegarder, puis je ferais le fichier des monstres (Nom, Nom des objets, images et caractéristiques) | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Ven 9 Déc 2011 - 1:15 | |
| Bon, je vous mets le lien sur le zip du programme dans son état actuel (préparation de la gestion des monstres, dans le fichier parametres des monstres, il y a 25 monstres prêts à être affichés. J'ai mis une variable pour le nom du fichier pour le monstre actif pour préparer la lecture d'un fichier avec un minimum de variables et simplifier un peu (j'espère). J'ai préparé quelques vignettes de monstres dans monstres_2D c'est l'image qui s'affiche pendant les combats. Fichier zip: http://panoramic-rpg.e-monsite.com/medias/files/donjons-2.zipAller bonne nuit tout le monde et si vous avez des idées ou si vous faites des ajouts (monstres, fonctionnalités, ou n'importe quoi, n'hésitez pas à me le dire) | |
| | | bignono
Nombre de messages : 1127 Age : 66 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Ven 9 Déc 2011 - 7:24 | |
| bonjour Jicehel Ça avance petit à petit. (tu as toujours la même erreur que je t'ai signalé précédemment). Pas mal tes personnages. Peux-tu me dire sur quel site tu as téléchargé ces objets md2. Tu as des textures de qualité pour certains. Moi, sur je ne sais plus quel site, j'avais trouvé beaucoup de fichier md2, mais la qualité des objets et textures laissait franchement à désirer. La plupart avait une résolution de 256x256, d'autres en 252x195 ou 220x193. Yen avait même en 128x128 et 64x64. D'ailleurs si quelqu'un connait un site où télécharger des fichiers md2 avec textures, je suis preneur!On trouve beaucoup de site pour les objets 3ds ou d'autres types (obj, lwo,etc...) Il suffit d'avoir un logiciel 3d comme wings ou blender qui sont gratuits et on peut exporter les objets en 3ds. Les sites où je télécharge le plus les objets 3d : Archives 3d et turbosquid. On y trouve énormément de choses. A vous de faire le tri! Bon courage à toi Jicehel et à tout le monde d'ailleurs. | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Ven 9 Déc 2011 - 8:55 | |
| Les monstres viennent de jheretic, jdoom et autres ... j'ai fais un peu de recherche sur les forum des mods de ces jeux. Pour l'erreur, je suis désolé, mais comme je n'arrive pas à la reproduire, je ne sais pas comment résoudre. Peux tu me faire un copier des 4/5 lignes où il te dit qu'il y a une erreur ?
Tu as aimé l'écran de combat ? C'est un peu plus chouette ? Si tu as des idées d'amélioration (voir mieux si tu veux améliorer des trucs) n'hésites pas.
| |
| | | bignono
Nombre de messages : 1127 Age : 66 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Ven 9 Déc 2011 - 14:36 | |
| Salut Jicehel, Je te mets les lignes qui me génère l'erreur avec les etiquettes correspondantes pour que tu saches où cela ce situe. - Code:
-
MD1: select a(X_monstre(1),Y_monstre(1)) MD2: select a(X_monstre(1),Y_monstre(1)) MD3: select a(X_monstre(1),Y_monstre(1)) MD4: select a(X_monstre(1),Y_monstre(1))
D'autre part ton monstre passe à travers les murs et se ballade à l'extérieur, il ne rentre plus dans le donjon. Et comme au bout d'un moment, l'erreur arrive, je ne peux même pas voir ton interface de combat. Pour l'instant je travaille toujours sur un projet alliant mon labyrinthe et le chateau en 3d, mais comme j'ai eu plusieurs gros bug dans mon prog et pas assez de place pour afficher dans les couloirs du labyrinthe mon personnage, je suis en train de recommencer à zéro en redimensionnant tout! Bref, c'est la cata...! Mais j'espère m'en sortir. Je vais doucement à mon rythme. J'espère vous montrer le résultat dans le courant janvier si tout va bien. A bientôt... | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Ven 9 Déc 2011 - 16:16 | |
| OK, je pense savoir ce qui t'arrive. Tu n'a pas dû régénérer de nouveau donjon depuis quelques temps. Je m'explique. Normalement, le monstre commence forcément à l'intérieur du labyrinthe (à moins que tu ais changé la position en (0, 0) manuellement. Normalement, maintenant il va de 1,1 à H,V. Je pense à ça car tu me dis que le monstre traverse les murs, ce qui se produisait avec les premières versions du générateur de donjon avec les murs extérieusr. En effet, je forçais un mur sur les bords, mais j'avais oublié de mettre à jour la case d'avant (pour l'autre face du mur), du coup, comme il n'y avait pas de mur pour sortir, le monstre pouvait sortir (et pas rerentrer puisque de l'autre côté, le mur était mis). (Ça pourra servir plus tard de manière volontaire à l’intérieur de donjon pour faire des passage secret par exemple à sens unique, mais là c'était involontaire et le monstre sortait en dehors des limites définies). Essaye de régénérer ton donjon avec les versions fournis dans le zip (nouveau, modification des murs pour éviter les salles fermées et faire le donjon comme tu veux puis sauvegarder) puis réessaye, en principe, tu n'auras plus d'erreur
Dernière édition par Jicehel le Dim 11 Déc 2011 - 12:25, édité 2 fois | |
| | | bignono
Nombre de messages : 1127 Age : 66 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Dim 11 Déc 2011 - 6:29 | |
| Bonjour Jicehel, C'est très bien ton prog, Il tourne sans problème. Il faut que tu supprimes dans l'interface de combat "Rouge:Héro/Bleu: Squelette animé" ou mettre autre chose à la place, car cela porte à confusion, ton ennemi étant tout habillé en rouge. J'attends la suite avec impatience... | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Générateur / editeur de donjon (les débuts) Dim 11 Déc 2011 - 11:16 | |
| Bonnes remarques La prochaine étape sera le fichier de définition des monstres (nom des images / caractéristiques). Je pense que je programmerai un peu ce soir | |
| | | Contenu sponsorisé
| Sujet: Re: Générateur / editeur de donjon (les débuts) | |
| |
| | | | Générateur / editeur de donjon (les débuts) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |