FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
FORT LABYRINTH Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
FORT LABYRINTH Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
FORT LABYRINTH Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
FORT LABYRINTH Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
FORT LABYRINTH Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
FORT LABYRINTH Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
FORT LABYRINTH Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
FORT LABYRINTH Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
FORT LABYRINTH Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
FORT LABYRINTH Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
FORT LABYRINTH Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
FORT LABYRINTH Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
FORT LABYRINTH Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
FORT LABYRINTH Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
FORT LABYRINTH Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
Code promo Nike : -25% dès 50€ d’achats sur tout le site Nike
Voir le deal

 

 FORT LABYRINTH

Aller en bas 
+3
exdragon
Jicehel
bignono
7 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

FORT LABYRINTH Empty
MessageSujet: FORT LABYRINTH   FORT LABYRINTH EmptyDim 25 Déc 2011 - 0:25

Bonjour à tous les Panoramiciens et Joyeux NOËL, Very Happy santa

Comme cadeau de NOËL, je vous dévoile le source sur lequel je travaille pour le moment et qui me donne énormément de fil à retordre.
Vous reconnaitrez certainement le labyrinthe et le chateau en 3d (voir les sujets post précédents).Ce n'est pas terminé, il me reste plein de choses à coder. Les bruitages de portes (ouverture et fermeture) les bruitages à la sortie du labyrinthe, règler les volumes de ces bruitages, coder au moins un monstre et en extraire toutes les frames, et gèrer ses déplacements. Donc, dans le menu au début du jeu, l'option monstre est inopérante.
C'est jouable pour l'instant, mais le problème que je rencontre principalement, c'est que le héros se déplace plus vite dans certaines directions et plus lentement dans d'autres. Je pense que c'est principalement dû au nombre total d'objet 3d que la carte graphique a à gérer.
Au début, le chargement est un peu long et le sera certainement encore plus par la suite, appuyez sur n'importe quelle touche pour accèder au menu des options, puis règlez ces options avec les 4 flèches du clavier et validez le tout avec la touche enter. Laissez l'intro se dérouler, et dès que la boussole apparaîtra, vous pourrez diriger le personnage dans les dédales du labyrinthe.
Au point de vue de la structure du programme, elle est semblable à celle utilisée dans les programmes du post "Labyrinth". Par contre, j'ai modifié le mode de construction des murs en essayant de faire un algorythme qui empèche d'avoir des doublons. En effet, la plupart des salles, avant avait au moins 1 ou 2 murs en commun avec une autre. J'ai pu diminuer ainsi d'environ 1/3 le nombre d'objet. Mais je crois qu'on peut faire mieux. Il faut que j'y réfléchisse encore pour voir si on ne peut pas simplifier.
Il se peut que se soit plus rapide sur certaine machine et plus lent sur d'autres. A vous d'essayer de règler les paramêtres des variables.
Il arrive parfois qu'une fois toute l'intro passée, au moment où le jeu doit démarrer, l'écran se fige. Fermez avec la croix en haut à droite et relancer le programme. Ce doit être à cause du timer de l'intro que je n'arrive pas à règler.
La texture du modèle du héros s'applique très mal à l'arrière et il ne me plait guère. C'est plus difficile de trouver des bons que des méchants sur internet. Des méchants, des monstres, des vilains, des pas beau, j'en ai plein! Quand j'ai extrait les frames de mon héros, je lui ai enlevé le bouclier, parce que je le veux sans bouclier dans un premier temps, puis j'extraierai à nouveau toutes les frames avec le bouclier et enfin je lui adjoindrai les frames de l'épée. Donc vous l'avez compris, j'ai l'intention de coder un combat avec le méchant si ils se retrouvent face à face. Mais ça, c'est une autre histoire!

santa cheers santa cheers santa cheers
Code:
' ******************************************************************************
' ******************************************************************************
' ************************ FORT LABYRINTH version 1.13 *************************
' ********************** CRÉÉ PAR bignono le 25/12/2011 ************************
' **************************** EN BASIC PANORAMIC ******************************
' ******************************************************************************
' ******************************************************************************
' ********************* 2ème partie de mon jeu d'aventure **********************
' ******************************************************************************
' ******************************************************************************
' ******************************************************************************

dim c_espace,tch,tpm1,tpm2,opt(4),c(4)
dim ang,av,b,bs,d,dtn,gd,hrs,h,i,j,k,m,n,pas,pasv,pk,r,s,v,prt,pt,rot,w,x,y,z
dim chemin$,txt1$,txt2$,txt3$,txt4$,txt5$,txt6$,txt7$,titre1$,titre2$,titre3$
label affiche,droite,gauche,herodtn,intro,lab,moteur,music,pan1,pan2,pan4,pan8
label pivot,pospk,pxz,quit,r1,r2,r3,r4,r5,r6,r7,sortie,fin,trace
chemin$ ="c:\FORTLAB\"
titre1$="Bignono présente":titre2$="* * * F O R T - L A B Y R I N T H * * *"
titre3$="Programme et musique de Bignono"
txt1$="Patientez, chargement en cours...":txt2$="Construction de la forteresse..."
txt3$="Création du héros...":txt4$="Création du monstre...": ' Création du monstre n°1 n°2 n°3
txt5$="Génération du labyrinthe...":txt6$=" Création des murs dans la salle "
txt7$="Initialisation du programme..."

sound 20:file_load 20,chemin$+"cours1.mp3"
sound 21:file_load 21,chemin$+"cours2.mp3"
sound 22:file_load 22,chemin$+"hersebaisser.mp3"
sound 23:file_load 23,chemin$+"herselever.mp3"
sound 24:file_load 24,chemin$+"pontlevisfermer.mp3"
sound 25:file_load 25,chemin$+"pontlevisbaisser3.mp3"
sound 26:file_load 26,chemin$+"chargement.mp3":play 26
sound 27:file_load 27,chemin$+"mus1.mp3"
sound 28:file_load 28,chemin$+"mus2.mp3"
sound 29:file_load 29,chemin$+"mus3.mp3"
sound 30:file_load 30,chemin$+"mus4.mp3"

' ******************************************************************************
' ************************ INITIALISATION DES VARIABLES ************************
' ******************************************************************************
' ************ h et v représentent les dimensions du labyrinthe ****************
' ****** pas : sert à règler la vitesse de déplacement dans le labyrinthe ******
' ****** pasv: sert à règler la vitesse du zoom vertical ***********************
h=21:v=20:n=h*v-1:h=h+1:v=v+1:d=1:w=13:pas=0.5:pasv=10:c_espace=0
dim a(h+1,v+1),mur(h+1,v+1),trc(h,v)
gosub lab

label dbug
DIM debug : debug =1
IF Debug =1
    FORM 500 : WIDTH 500, 150 : HEIGHT 500, 200 : TOP 500, 3 : LEFT 500, 3
    ALPHA 501 : PARENT 501, 500 : HEIGHT 501, 15 : TOP 501, 3 : LEFT 501, 3
    ALPHA 502 : PARENT 502, 500 : HEIGHT 502, 15 : TOP 502, 20 : LEFT 502, 3
    ALPHA 503 : PARENT 503, 500 : HEIGHT 503, 15 : TOP 503, 37 : LEFT 503, 3
    ALPHA 504 : PARENT 504, 500 : HEIGHT 504, 15 : TOP 504, 54 : LEFT 504, 3
    ALPHA 505 : PARENT 505, 500 : HEIGHT 505, 15 : TOP 505, 71 : LEFT 505, 3
    ALPHA 506 : PARENT 506, 500 : HEIGHT 506, 15 : TOP 506, 88 : LEFT 506, 3
    ALPHA 507 : PARENT 507, 500 : HEIGHT 507, 15 : TOP 507, 105 : LEFT 507, 3
    ALPHA 508 : PARENT 508, 500 : HEIGHT 508, 15 : TOP 508, 122 : LEFT 508, 3
    ALPHA 509 : PARENT 509, 500 : HEIGHT 509, 15 : TOP 509, 139 : LEFT 509, 3
END_IF

full_space 0:color 0,0,0,0:' border_hide 0

font_name 0,"Times New Roman":font_size 0,50:font_bold 0:font_color 0,255,0,0
print_locate screen_x/2-(text_width(titre1$,0)/2),screen_y/2-12*(text_height(titre1$,0)/2):print titre1$:wait 1000
print_locate screen_x/2-(text_width(titre2$,0)/2),screen_y/2-10*(text_height(titre2$,0)/2):print titre2$:wait 1000
print_locate screen_x/2-(text_width(titre3$,0)/2),screen_y/2-8*(text_height(titre3$,0)/2):print titre3$:wait 1000
print_locate screen_x/2-(text_width(txt1$,0)/2),screen_y/2-5*(text_height(txt1$,0)/2):print txt1$:wait 1000

scene3d 1:3d_target_is 1:hide 1:full_space 1:light_position 0,1500,0:3d_skybox 1
3d_load_texture_right 1,chemin$+"sk1.bmp"
3d_load_texture_back 1,chemin$+"sk2.bmp"
3d_load_texture_top 1,chemin$+"sk3.bmp"
3d_load_texture_left 1,chemin$+"sk4.bmp"
3d_load_texture_front 1,chemin$+"sk5.bmp"
3d_load_texture_bottom 1,chemin$+"sk6.bmp"
3d_plane 2:3d_scale 2,1000,1000,1:3d_x_rotate 2,90:3d_y_position 2,-0.25
3d_load_texture 2,chemin$+"herbe.JPG":3d_u_tile 2,400:3d_v_tile 2,400
3d_plane 3:3d_scale 3,42,40,1:3d_x_rotate 3,90:3d_position 3,240,0,230
3d_load_texture 3,chemin$+"terre.jpg":3d_u_tile 3,10:3d_v_tile 3,10

3d_cube 4,1:3d_hide 4:3d_mesh 5:3d_hide 5: ' CRÉATION DES VÉHICULES MOTEUR ET CAMÉRA
gosub dbug
' ******************************************************************************
' ****************      CONSTRUCTION DE LA FORTERESSE  ************************
' ******************************************************************************
print_locate screen_x/2-(text_width(txt2$,0)/2),screen_y/2-3*(text_height(txt2$,0)/2):print txt2$
' LES 8 TOURS
3d_mesh 6:3d_load_object 6,chemin$+"tr.3ds":3d_load_texture 6,chemin$+"tr.jpg"
3d_position 6,240,0,230:3d_scale 6,42,44,32:3d_x_rotate 6,90:3d_z_rotate 6,180
3d_mesh 7:3d_load_object 7,chemin$+"gués.3ds":3d_load_texture 7,chemin$+"gués.bmp"
3d_position 7,240,0,230:3d_scale 7,42,44,32:3d_x_rotate 7,90:3d_z_rotate 7,180
' les remparts latéraux à l'entrée
3d_box 8,42,72,20:3d_position 8,200,36,-33:3d_y_rotate 8,90:3d_load_texture 8,chemin$+"m1r.jpg"
3d_box 9,42,72,20:3d_position 9,288,36,-33:3d_y_rotate 9,90:3d_load_texture 9,chemin$+"m1r.jpg"
' les blocs remparts aux entrées et à la sortie
3d_box 10,22,72,20:3d_position 10,220,36,-80:3d_load_texture 10,chemin$+"m8r.jpg": ' rempart latéral pont levis et portes entrée
3d_box 11,22,72,20:3d_position 11,260,36,-80:3d_load_texture 11,chemin$+"m8r.jpg": ' rempart latéral pont levis et portes entrée
3d_box 12,21,24,20:3d_position 12,240,60,-80:3d_load_texture 12,chemin$+"m8.jpg": ' bloc au-dessus pont levis et portes entrée
3d_box 13,21,24,20:3d_position 13,240,60,20:3d_load_texture 13,chemin$+"m8.jpg" : ' bloc au-dessus herse
3d_box 14,21,24,20:3d_position 14,240,60,440:3d_load_texture 14,chemin$+"m8.jpg": ' bloc au-dessus portes sortie
' LA HERSE A L'ENTRÉE
3d_mesh 15:3d_position 15,240,-1,13:3d_x_rotate 15,90:3d_scale 15,1,1,1.15
3d_load_object 15,chemin$+"herse.3ds":3d_load_texture 15,chemin$+"herse.bmp"
' LE PONT-LEVIS A L'ENTRÉE
3d_mesh 16:3d_position 16,240,0,-90:3d_x_rotate 16,90:3d_scale 16,1,1,1.1
3d_load_object 16,chemin$+"pntlvs.3ds":3d_load_texture 16,chemin$+"pntlvs.jpg"
' LES PORTES D'ENTRÉE
3d_mesh 17:3d_position 17,227,0,-70:3d_x_rotate 17,90:3d_scale 17,1,1,1.1
3d_load_object 17,chemin$+"porte.3ds":3d_load_texture 17,chemin$+"porte.jpg"
3d_mesh 18:3d_position 18,252,0,-70:3d_x_rotate 18,90:3d_z_rotate 18,180:3d_scale 18,1,1,1.1
3d_load_object 18,chemin$+"porte.3ds":3d_load_texture 18,chemin$+"porte.jpg"
' LES PORTES DE SORTIE
3d_mesh 19:3d_position 19,230,0,442:3d_x_rotate 19,90:3d_scale 19,0.78,0.75,1.1
3d_load_object 19,chemin$+"porte.3ds":3d_load_texture 19,chemin$+"porte.jpg"
3d_mesh 20:3d_position 20,249,0,442:3d_x_rotate 20,90:3d_z_rotate 20,180:3d_scale 20,0.78,0.75,1.1
3d_load_object 20,chemin$+"porte.3ds":3d_load_texture 20,chemin$+"porte.jpg"
' LE PONT-LEVIS A LA SORTIE
3d_mesh 21:3d_position 21,240,0,450:3d_x_rotate 21,90:3d_scale 21,1,1,1.1
3d_load_object 21,chemin$+"pntlvs.3ds": 3d_load_texture 21,chemin$+"pntlvs.jpg"
' LA HERSE A LA SORTIE
3d_mesh 22:3d_position 22,240,-1,446:3d_x_rotate 22,90:3d_scale 22,1,1,1.15
3d_load_object 22,chemin$+"herse.3ds": 3d_load_texture 22,chemin$+"herse.bmp"
' TEXTE 3D LABYRINTH
 3d_mesh 23:3d_load_object 23,chemin$+"Labyrinth.3ds":3d_load_texture 23,chemin$+"3d_L1.jpg"
3d_position 23,240,30,-250:3d_x_rotate 23,90:3d_scale 23,30,30,30:3d_z_rotate 23,180:3d_hide 23
' TEXTE 3D FORT
3d_mesh 24:3d_load_object 24,chemin$+"Fort.3ds":3d_load_texture 24,chemin$+"3d_L1.jpg"
3d_position 24,240,30,-250:3d_x_rotate 24,90:3d_scale 24,30,30,30:3d_z_rotate 24,180:3d_hide 24
' LE MENU OPTION EN LETTRES 3D AVEC TEXTURES
3d_mesh 25:3d_load_object 25,chemin$+"opt1_oui.3ds":3d_position 25,240,60,-225
3d_mesh 26:3d_load_object 26,chemin$+"opt1_non.3ds":3d_position 26,240,60,-225
3d_mesh 27:3d_load_object 27,chemin$+"opt2_oui.3ds":3d_position 27,240,50,-225
3d_mesh 28:3d_load_object 28,chemin$+"opt2_non.3ds":3d_position 28,240,50,-225
3d_mesh 29:3d_load_object 29,chemin$+"opt3_oui.3ds":3d_position 29,240,40,-225
3d_mesh 30:3d_load_object 30,chemin$+"opt3_non.3ds":3d_position 30,240,40,-225
3d_mesh 31:3d_load_object 31,chemin$+"opt4_oui.3ds":3d_position 31,240,30,-225
3d_mesh 32:3d_load_object 32,chemin$+"opt4_non.3ds":3d_position 32,240,30,-225
for b=25 to 32:3d_load_texture b,chemin$+"3d_L3.jpg":3d_x_rotate b,90
3d_scale b,5,5,5:3d_z_rotate b,180:3d_hide b:next b

print_locate screen_x/2-(text_width(txt3$,0)/2),screen_y/2-1*(text_height(txt3$,0)/2):print txt3$
' CRÉATION DU HÉROS
3d_mesh 33:3d_load_object 33,chemin$+"pk001.3ds"
3d_mesh 34:3d_load_object 34,chemin$+"pk002.3ds"
3d_mesh 35:3d_load_object 35,chemin$+"pk003.3ds"
3d_mesh 36:3d_load_object 36,chemin$+"pk004.3ds"
3d_mesh 37:3d_load_object 37,chemin$+"pk005.3ds"
3d_mesh 38:3d_load_object 38,chemin$+"pk006.3ds"
3d_mesh 39:3d_load_object 39,chemin$+"pk007.3ds"
3d_mesh 40:3d_load_object 40,chemin$+"pk008.3ds"
3d_mesh 41:3d_load_object 41,chemin$+"pk009.3ds"
3d_mesh 42:3d_load_object 42,chemin$+"pk010.3ds"
3d_mesh 43:3d_load_object 43,chemin$+"pk011.3ds"
3d_mesh 44:3d_load_object 44,chemin$+"pk012.3ds"
3d_mesh 45:3d_load_object 45,chemin$+"pk013.3ds"
3d_mesh 46:3d_load_object 46,chemin$+"pk014.3ds"
3d_mesh 47:3d_load_object 47,chemin$+"pk015.3ds"
3d_mesh 48:3d_load_object 48,chemin$+"pk016.3ds"
3d_mesh 49:3d_load_object 49,chemin$+"pk017.3ds"
3d_mesh 50:3d_load_object 50,chemin$+"pk018.3ds"
3d_mesh 51:3d_load_object 51,chemin$+"pk019.3ds"
3d_mesh 52:3d_load_object 52,chemin$+"pk020.3ds"
3d_mesh 53:3d_load_object 53,chemin$+"pk021.3ds"
3d_mesh 54:3d_load_object 54,chemin$+"pk022.3ds"
3d_mesh 55:3d_load_object 55,chemin$+"pk023.3ds"
3d_mesh 56:3d_load_object 56,chemin$+"pk024.3ds"
3d_mesh 57:3d_load_object 57,chemin$+"pk025.3ds"
3d_mesh 58:3d_load_object 58,chemin$+"pk026.3ds"
3d_mesh 59:3d_load_object 59,chemin$+"pk027.3ds"
3d_mesh 60:3d_load_object 60,chemin$+"pk028.3ds"
3d_mesh 61:3d_load_object 61,chemin$+"pk029.3ds"
3d_mesh 62:3d_load_object 62,chemin$+"pk030.3ds"
3d_mesh 63:3d_load_object 63,chemin$+"pk031.3ds"
3d_mesh 64:3d_load_object 64,chemin$+"pk032.3ds"
3d_mesh 65:3d_load_object 65,chemin$+"pk033.3ds"
3d_mesh 66:3d_load_object 66,chemin$+"pk034.3ds"
3d_mesh 67:3d_load_object 67,chemin$+"pk035.3ds"
3d_mesh 68:3d_load_object 68,chemin$+"pk036.3ds"
3d_mesh 69:3d_load_object 69,chemin$+"pk037.3ds"
3d_mesh 70:3d_load_object 70,chemin$+"pk038.3ds"
3d_mesh 71:3d_load_object 71,chemin$+"pk039.3ds"
3d_mesh 72:3d_load_object 72,chemin$+"pk040.3ds"
3d_mesh 73:3d_load_object 73,chemin$+"pk041.3ds"
3d_mesh 74:3d_load_object 74,chemin$+"pk042.3ds"
3d_mesh 75:3d_load_object 75,chemin$+"pk043.3ds"
3d_mesh 76:3d_load_object 76,chemin$+"pk044.3ds"
3d_mesh 77:3d_load_object 77,chemin$+"pk045.3ds"
3d_mesh 78:3d_load_object 78,chemin$+"pk046.3ds"
3d_mesh 79:3d_load_object 79,chemin$+"pk047.3ds"
3d_mesh 80:3d_load_object 80,chemin$+"pk048.3ds"
3d_mesh 81:3d_load_object 81,chemin$+"pk049.3ds"
3d_mesh 82:3d_load_object 82,chemin$+"pk050.3ds"
3d_mesh 83:3d_load_object 83,chemin$+"pk051.3ds"
3d_mesh 84:3d_load_object 84,chemin$+"pk052.3ds"
3d_mesh 85:3d_load_object 85,chemin$+"pk053.3ds"
3d_mesh 86:3d_load_object 86,chemin$+"pk054.3ds"
3d_mesh 87:3d_load_object 87,chemin$+"pk055.3ds"
3d_mesh 88:3d_load_object 88,chemin$+"pk056.3ds"
3d_mesh 89:3d_load_object 89,chemin$+"pk057.3ds"
3d_mesh 90:3d_load_object 90,chemin$+"pk058.3ds"
3d_mesh 91:3d_load_object 91,chemin$+"pk059.3ds"
3d_mesh 92:3d_load_object 92,chemin$+"pk060.3ds"
3d_mesh 93:3d_load_object 93,chemin$+"pk061.3ds"
3d_mesh 94:3d_load_object 94,chemin$+"pk062.3ds"
3d_mesh 95:3d_load_object 95,chemin$+"pk063.3ds"
3d_mesh 96:3d_load_object 96,chemin$+"pk064.3ds"
3d_mesh 97:3d_load_object 97,chemin$+"pk065.3ds"
3d_mesh 98:3d_load_object 98,chemin$+"pk066.3ds"
3d_mesh 99:3d_load_object 99,chemin$+"pk067.3ds"
3d_mesh 100:3d_load_object 100,chemin$+"pk068.3ds"
3d_mesh 101:3d_load_object 101,chemin$+"pk069.3ds"
3d_mesh 102:3d_load_object 102,chemin$+"pk070.3ds"
3d_mesh 103:3d_load_object 103,chemin$+"pk071.3ds"
3d_mesh 104:3d_load_object 104,chemin$+"pk072.3ds"
3d_mesh 105:3d_load_object 105,chemin$+"pk073.3ds"
3d_mesh 106:3d_load_object 106,chemin$+"pk074.3ds"
3d_mesh 107:3d_load_object 107,chemin$+"pk075.3ds"
3d_mesh 108:3d_load_object 108,chemin$+"pk076.3ds"
3d_mesh 109:3d_load_object 109,chemin$+"pk077.3ds"
3d_mesh 110:3d_load_object 110,chemin$+"pk078.3ds"
3d_mesh 111:3d_load_object 111,chemin$+"pk079.3ds"
3d_mesh 112:3d_load_object 112,chemin$+"pk080.3ds"
3d_mesh 113:3d_load_object 113,chemin$+"pk081.3ds"
3d_mesh 114:3d_load_object 114,chemin$+"pk082.3ds"
3d_mesh 115:3d_load_object 115,chemin$+"pk083.3ds"
3d_mesh 116:3d_load_object 116,chemin$+"pk084.3ds"
3d_mesh 117:3d_load_object 117,chemin$+"pk085.3ds"
3d_mesh 118:3d_load_object 118,chemin$+"pk086.3ds"
3d_mesh 119:3d_load_object 119,chemin$+"pk087.3ds"
3d_mesh 120:3d_load_object 120,chemin$+"pk088.3ds"
3d_mesh 121:3d_load_object 121,chemin$+"pk089.3ds"
3d_mesh 122:3d_load_object 122,chemin$+"pk090.3ds"
3d_mesh 123:3d_load_object 123,chemin$+"pk091.3ds"
3d_mesh 124:3d_load_object 124,chemin$+"pk092.3ds"
3d_mesh 125:3d_load_object 125,chemin$+"pk093.3ds"
3d_mesh 126:3d_load_object 126,chemin$+"pk094.3ds"
3d_mesh 127:3d_load_object 127,chemin$+"pk095.3ds"
3d_mesh 128:3d_load_object 128,chemin$+"pk096.3ds"
3d_mesh 129:3d_load_object 129,chemin$+"pk097.3ds"
3d_mesh 130:3d_load_object 130,chemin$+"pk098.3ds"
3d_mesh 131:3d_load_object 131,chemin$+"pk099.3ds"
3d_mesh 132:3d_load_object 132,chemin$+"pk100.3ds"
3d_mesh 133:3d_load_object 133,chemin$+"pk101.3ds"
3d_mesh 134:3d_load_object 134,chemin$+"pk102.3ds"
3d_mesh 135:3d_load_object 135,chemin$+"pk103.3ds"
3d_mesh 136:3d_load_object 136,chemin$+"pk104.3ds"
3d_mesh 137:3d_load_object 137,chemin$+"pk105.3ds"
3d_mesh 138:3d_load_object 138,chemin$+"pk106.3ds"
3d_mesh 139:3d_load_object 139,chemin$+"pk107.3ds"
3d_mesh 140:3d_load_object 140,chemin$+"pk108.3ds"
3d_mesh 141:3d_load_object 141,chemin$+"pk109.3ds"
3d_mesh 142:3d_load_object 142,chemin$+"pk110.3ds"
3d_mesh 143:3d_load_object 143,chemin$+"pk111.3ds"
3d_mesh 144:3d_load_object 144,chemin$+"pk112.3ds"
3d_mesh 145:3d_load_object 145,chemin$+"pk113.3ds"
3d_mesh 146:3d_load_object 146,chemin$+"pk114.3ds"
pk=32
repeat
  pk=pk+1:3d_load_texture pk,chemin$+"pk.bmp":3d_scale pk,0.25,0.25,0.25
  3d_x_rotate pk,90:3d_z_rotate pk,270:3d_hide pk:3d_position pk,240,7,-290
until pk>=146:pk=33

' GARGOYLES
3d_mesh 147:3d_load_object 147,chemin$+"gargoyle.3ds"
3d_scale 147,0.75,0.75,0.75:3d_x_rotate 147,90:3d_y_rotate 147,30
3d_position 147,232,18,20:3d_color 147,0,50,40
3d_mesh 148:3d_load_object 148,chemin$+"gargoyle.3ds"
3d_scale 148,0.75,0.75,0.75
3d_x_rotate 148,90:3d_y_rotate 148,330:3d_z_rotate 148,180
3d_position 148,248,18,20:3d_color 148,0,50,40
' DRAGONS
3d_box 149,20,5,40:3d_position 149,220,0,-30:3d_load_texture 149,chemin$+"3d_L4.jpg": ' piedestal marbre droit
3d_box 150,20,5,40:3d_position 150,268,0,-30:3d_load_texture 150,chemin$+"3d_L4.jpg": ' piedestal marbre gauche
' dragon 1 droit
3d_mesh 151:3d_load_object 151,chemin$+"dragdroit.3ds":3d_color 151,0,25,15
3d_scale 151,40,40,40:3d_y_rotate 151,150
3d_x_rotate 151,90:3d_position 151,218,2,-30
' dragon 2 gauche
3d_mesh 152:3d_load_object 152,chemin$+"dragauche.3ds":3d_color 152,0,25,15
3d_scale 152,40,40,40:3d_y_rotate 152,210
3d_x_rotate 152,90:3d_position 152,272,2,-30

' ******************************************************************************
' ****************      CONSTRUCTION DU LABYRINTHE      ************************
' ******************************************************************************
' 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
print_locate screen_x/2-(text_width(txt5$,0)/2),screen_y/2+3*(text_height(txt5$,0)/2):print txt5$
for i=1 to h:a(i,1)=8:next i:for j=1 to v:a(1,j)=1:next j
for j=2 to v
  for i=2 to h: trc(i,j)=0
if (i=(int(h/2)+1) and j=2) then a(i,j)=a(i,j)-8
if (i=(int(h/2)+1) and j=v) then a(i,j)=a(i,j)-2
  txt6$=left$(txt6$,33)+str$(i*j)+"..."
  print_locate screen_x/2-(text_width(txt6$,0)/2),screen_y/2+5*(text_height(txt6$,0)/2):print txt6$

    select a(i,j)
      case 1
        gosub pan1
      case 2
        gosub pan2
      case 3
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan2
      case 4
        gosub pan4
      case 5
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan4
      case 6
        gosub pan2:gosub pan4
      case 7
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan2:gosub pan4
      case 8
        gosub pan8
      case 9
        if a(i-1,j)<4 or a(i-1,j)>7 and a(i-1,j)<12 then gosub pan1
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 10
        gosub pan2
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 11
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan2
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 12
        gosub pan4
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 13
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan4
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 14
        gosub pan2:gosub pan4
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
    end_select
  next i
next j

gosub dbug
print_locate screen_x/2-text_width(txt7$,0)/2,screen_y/2+7*text_height(txt7$,0)/2:print txt7$

' ******************************************************************************
' ******************      CRÉATION DE LA BOUSSOLE      ************************
' ******************************************************************************
scene3d 2:3d_target_is 2:hide 2:width 2,160:height 2,160
left 2,screen_x-180:top 2,screen_y-240:color 2,0,0,0
3d_cylinder number_3d_objects+1,0.25,1,1
3d_load_texture number_3d_objects,chemin$+"étui.jpg"
3d_x_rotate number_3d_objects,90
3d_cylinder number_3d_objects+1,0.26,0.9,0.9
3d_load_texture number_3d_objects,chemin$+"cadran.jpg"
3d_x_rotate number_3d_objects,270
3d_mesh number_3d_objects+1
3d_load_object number_3d_objects,chemin$+"aiguille.3ds"
3d_load_texture number_3d_objects,chemin$+"aiguille.bmp"
3d_x_rotate number_3d_objects,270:3d_y_rotate number_3d_objects,180
bs=number_3d_objects
3d_target_is 1

' ******************************************************************************
' ** Initialisation position départ et création d'1 timer pour l'intro du jeu **
' ** Création d'1 second timer pour gèrer les déplacements dans le labyrinthe **
' ******************************************************************************
i=int(h/2)+1:j=1:dtn=1

' ! INFO: en dessous de 17 le timer_interval 3 est inopérant & le prog ralenti !
timer 3:timer_interval 3,200:on_timer 3,intro
timer 4:timer_interval 4,1:on_timer 4,moteur
show 1
end

' ******************************************************************************
' *****************    LE PROGRAMME PRINCIPAL    ******************************
' ******************************************************************************
moteur:

timer_off 4

gosub dbug

if m<>0
  gosub music
  if tpm2-tpm1>60 then tpm1=tpm2:m=m+1:play m:if m>29 then m=26
end_if

if c_espace=1 and opt(2)=27 then gosub trace
timer_on 4:tch=scancode:timer_off 4
select tch
  case 0: ' LE HÉROS EN MOUVEMENT RESTE EN POSITION STATIQUE
      3d_hide pk:pk=pk+1:if pk>130 then pk=33
      3d_position pk,x,7,z:3d_show pk
  case 27:gosub fin:  ' SORTIE PROGRAMME
  case 32:c_espace=1: ' AFFICHAGE DU PLAN DU LABYRINTHE
  case 37:gosub gauche: ' FLECHE GAUCHE = ROTATION A GAUCHE
  case 39:gosub droite: ' FLECHE DROITE = ROTATION A DROITE
  case 38:  ' FLECHE HAUT = DTN DEFINIT LA DIRECTION NORD, OUEST, SUD OU EST
  3d_hide pk:pk=131:3d_show pk
  select dtn
    case 1
    if j < v+1
        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*20:j=j+1:gd=j*20
              repeat
                pt=pt+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until pt>=gd
        end_if
    end_if
    case 2
    if i < h  and j > 1
        if a(i,j)<4 or a(i,j)>7 and a(i,j)<12
          pt=i*20:i=i+1:gd=i*20
              repeat
                pt=pt+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until pt>=gd
        end_if
    end_if
    case 3
    if j > 2
        if a(i,j)<8
            pt=j*20:j=j-1:gd=j*20
              repeat
                gd=gd+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until gd>=pt
        end_if
    end_if
    case 4
    if i > 2 and j > 1
        if odd(a(i,j))=0
            pt=i*20:i=i-1:gd=i*20
              repeat
                gd=gd+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until gd>=pt
        end_if
    end_if
  end_select
end_select

' MÉMORISATION DE SON PASSAGE PAR DES SPHÈRES ORANGES ==> OPTION PETIT POUCET
if opt(1)=25
  if trc(i,j)=0 and j>1
    3d_sphere number_3d_objects+1,2
    3d_position number_3d_objects,i*20,1,j*20
    3d_color number_3d_objects,224,128,32
    trc(i,j)=number_3d_objects
  end_if
end_if

' ROTATION DU HÉROS DANS LE SENS DU DÉPLACEMENT
 gosub herodtn

' TEST DE SORTIE DU LABYRINTHE
if j=v and i=(int(h/2)+1) and dtn=1 then goto sortie

timer_on 4

return

' ******************************************************************************
' *********************    LES ROUTINES      ***********************************
' ******************************************************************************

' CALCUL DES POSITIONS DES VÉHICULES MOTEUR ET CAMÉRA
affiche:
3d_position 5,o3d_x_position(4),o3d_y_position(4),o3d_z_position(4):3d_rotate 5,o3d_x_rotate(4),o3d_y_rotate(4),o3d_z_rotate(4)
3d_move 5,1:cam_position o3d_x_position(4),w,o3d_z_position(4):point_position o3d_x_position(5),13,o3d_z_position(5)
return

' CRÉATION DES MURS DU LABYRINTHE
pan1:
if i=2
  3d_box number_3d_objects+1,22,72,20:3d_position number_3d_objects,(i*20)-20,36,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20)-10,10,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1.jpg"
end_if
return
pan2:
if j=v
  3d_box number_3d_objects+1,20.9,72,20:3d_position number_3d_objects,(i*20),36,(j*20)+20:3d_load_texture number_3d_objects,chemin$+"m8r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20),10,(j*20)+10:3d_load_texture number_3d_objects,chemin$+"m8.jpg"
end_if
return
pan4:
if i=h
  3d_box number_3d_objects+1,22,72,20:3d_position number_3d_objects,(i*20)+20,36,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20)+10,10,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1.jpg"
end_if
return
pan8:
if j=2
  3d_box number_3d_objects+1,20.9,72,20:3d_position number_3d_objects,(i*20),36,(j*20)-20:3d_load_texture number_3d_objects,chemin$+"m8r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20),10,(j*20)-10:3d_load_texture number_3d_objects,chemin$+"m8.jpg"
end_if
return

' VISION SATELLITE DU LABYRINTHE EN 3D
trace:
  repeat
      w=w+pasv:cam_position o3d_x_position(4),w,o3d_z_position(4):display
  until w>=600

repeat
  if scancode=27 then gosub fin
  if scancode=37 then gosub gauche
  if scancode=39 then gosub droite
until scancode=32

repeat
  w=w-pasv:cam_position o3d_x_position(4),w,o3d_z_position(4):display
until w<=13
c_espace=0
return

' ROTATION A GAUCHE
gauche:
ang=rot+90:dtn=dtn+1:if dtn>4 then dtn=1
    repeat
        rot=rot+6*pas:3d_y_rotate 4,rot:3d_y_rotate bs,rot+180
        if w>13 then gosub pivot
        gosub affiche
    until rot>=ang
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 4,rot:3d_y_rotate bs,rot+180
        if w>13 then gosub pivot
        gosub affiche
    until rot<=ang
return

' ROTATION DE LA CAMÉRA LORS DE LA VISION SATELLITE
pivot:
cam_position o3d_x_position(4),o3d_y_position(4)+w,o3d_z_position(4)
return
' ROUTINES DE RECHERCHE DES POSITIONS X ET Z DU HÉROS
pospk:
3d_hide pk:pk=pk+1:if pk>146 then pk=131
if pk=138 then play 20
if pk=146 then play 21
gosub herodtn
3d_position pk,x,7,z:3d_show pk
return
herodtn:
  if dtn=1 then x=o3d_x_position(4):z=o3d_z_position(4)+5:3d_z_rotate pk,270
  if dtn=2 then x=o3d_x_position(4)+5:z=o3d_z_position(4):3d_z_rotate pk,0
  if dtn=3 then x=o3d_x_position(4):z=o3d_z_position(4)-5:3d_z_rotate pk,90
  if dtn=4 then x=o3d_x_position(4)-5:z=o3d_z_position(4):3d_z_rotate pk,180
return
pxz:
x=o3d_x_position(pk):z=o3d_z_position(pk)
return

' GÉNÉRATION DU LABYRINTHE
lab:

for j=1 to v+1:a(1,j)=4:a(h+1,j)=1:next j
for i=2 to h:a(i,v+1)=8:a(i,1)=2:for j=2 to v:a(i,j)=15:next j:next i
r=int(h/2+1):s=int(v/2+1):a(r,s)=15
for k=1 to n
r1:
  i=0
  if a(r-1,s)=15 then i=i+1 :c(i)=1
  if a(r,s-1)=15 then i=i+1 :c(i)=2
  if a(r+1,s)=15 then i=i+1 :c(i)=3
  if a(r,s+1)=15 then i=i+1 :c(i)=4
  if i=0 then goto r2
  if i<>1 then i=int(rnd(i)+1)
  select c(i)
      case 1 :a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2):r=r-1:a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4
      case 2 :a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8:s=s-1:a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2
      case 3 :a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4:r=r+1:a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2)
      case 4 :a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2:s=s+1:a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8
  end_select
  goto r7
r2:
  if d=-1 then goto r3
  if r<>h then goto r5
  if s<>v then goto r4
  r=2:s=2:goto r6
r3:
  if r<>2 then goto r5
  if s<>v then goto r4
  r=h:s=2: goto r6
r4:
  s=s+1:d=-1*d:goto r6
r5:
  r=r+d
r6:
  if a(r,s)=15 then goto r2
  goto r1
r7:
  mur(r,s)=int(rnd(6)+1)
  if mur(r,s)=mur(r-1,s) or mur(r,s)=mur(r+1,s) or mur(r,s)=mur(r,s-1) or mur(r,s)=mur(r,s+1) then goto r7
next k
return

' GESTION DE LA MUSIQUE
music:
tpm2=(val(left$(time$,2))*3600)+(val(mid$(time$,4,2))*60)+val(right$(time$,2))
return

' ******************************************************************************
' ******************************************************************************
' ******************* routine de DEBUGAGE **************************************
' ******************************************************************************
' ******************************************************************************
dbug:
    IF debug =1
        CAPTION 501, "number_3d_objects=" + STR$(number_3d_objects)
        CAPTION 502, "pk=" + STR$(pk)
        CAPTION 503, "number_objects=" + STR$(number_objects)
'        caption 504, "z=" + str$(z)
        caption 505, "dtn=" + str$(dtn)
        caption 506, "a(i,j)=" + str$(a(i,j))
        caption 507, "a(i,v)=" + str$(a(i,v))
        caption 508, "i=" + str$(i)
        caption 509, "j=" + str$(j)
    END_IF
return

' ******************************************************************************
' DÉBUT DU JEU --> NOM DU JEU, RÈGLAGE OPTIONS & ENTRÉE DANS LABYRINTHE
' ******************************************************************************
intro:
timer_off_all
av=180:hrs=-1:prt=360:pk=33:m=26
3d_position 4,((h/2)*20)-(3*odd(h))+20,15,-300:3d_show 23:3d_show 24:3d_show 33
gosub affiche
file_load 26,chemin$+"FORT LABYRINTH.mp3":gosub music:tpm1=tpm2:play 26
' LE NOM DU JEU EN PIERRE TOURNOIE ET LE HÉROS EN MOUVEMENT RESTE STATIQUE
while scancode=0
  3d_z_rotate 23,av:3d_z_rotate 24,abs(av):av=av-4
  3d_hide pk:gosub pxz:pk=pk+1:if pk>=130 then pk=33
  3d_position pk,x,7,z:3d_show pk
      gosub music:if tpm2-tpm1>62 then tpm1=tpm2:play 26
end_while
3d_hide 23:3d_hide 24:av=0
file_load 26,chemin$+"menu.mp3":gosub music:tpm1=tpm2:play 26
' AFFICHAGE DES OPTIONS DU JEU SOUS FORME DE MENU, LE HÉROS TOUJOURS STATIQUE
opt(1)=25:opt(2)=27:opt(3)=30:opt(4)=31:for b=1 to 4:3d_show opt(b):next b:b=1
repeat
    3d_hide pk:gosub pxz:pk=pk+1:if pk>=130 then pk=33
    3d_position pk,x,7,z:3d_show pk
  if scancode=27 then gosub fin
  if scancode=37 or scancode=39
    3d_hide opt(b)
      if even(opt(b))=1
        opt(b)=opt(b)-1
      else
        opt(b)=opt(b)+1
      end_if
  end_if
  if scancode=38 then 3d_load_texture opt(b),chemin$+"3d_L3.jpg":b=b-1:if b<1 then b=4
  if scancode=40 then 3d_load_texture opt(b),chemin$+"3d_L3.jpg":b=b+1:if b>4 then b=1
  3d_load_texture opt(b),chemin$+"3d_L2.jpg":3d_show opt(b)
  if opt(b)>31 then file_load 26,chemin$+"silence.mp3":play 26:m=0
  if (opt(b)=31 and m=0) then file_load 26,chemin$+"menu.mp3":tpm1=tpm2:play 26:m=26
  gosub music:if tpm2-tpm1>24.1 then tpm1=tpm2:play 26
until scancode=13
for b=25 to 32:3d_hide b:next b
' LE HÉROS COURT VERS L'ENTRÉE DU LABYRINTHE PENDANT QUE LE PONT-LEVIS,
' LES PORTES ET LA HERSE S'OUVRENT
if m>0 then file_load 26,chemin$+"entrée.mp3":gosub music:tpm1=tpm2:play 26
3d_hide pk:pk=131:3d_show pk
repeat
  3d_move 4,0.5:if av<335 then gosub pxz:z=z+0.5:gosub pospk: ' 3d_hide pk:pk=pk+1:if pk>146 then pk=131
  ' 3d_position pk,x,7,z:3d_show pk
      if av=49 then play 25: ' bruitage ouverture pont levis
      if av>50 and av<140 then 3d_x_rotate 16,av+40: ' MOUVEMENT ouverture DU PONT-LEVIS de l'entrée
      if av>150 and av<235 then 3d_z_rotate 17,prt:3d_z_rotate 18,180-prt:prt=prt-0.5: ' mouvement rotatif ouverture des portes d'entrée
      if av=240 then play 23: ' bruitage de la herse qui se lève
      if av>240 and av<284 then 3d_y_position 15,hrs:hrs=hrs+0.4: ' MOUVEMENT ouverture DE LA HERSE à l'entrée
  gosub affiche:av=av+0.5
  gosub music:if tpm2-tpm1>36.1 then tpm1=tpm2:play 26
until av>=340
3d_hide pk:pk=33:3d_position pk,x,7,z:3d_show pk

' LE HÉROS FAIT 1/2 TOUR
gosub gauche:gosub gauche
3d_hide pk:pk=33:3d_position pk,x,7,z-10:3d_show pk
' FERMETURE DES PONT-LEVIS, PORTES ET HERSE
av=180:play 24: ' bruitage fermeture pont levis
repeat
  3d_x_rotate 16,av:av=av-0.3: ' MOUVEMENT fermeture DU PONT-LEVIS de l'entrée
until av<=90
repeat
  3d_z_rotate 17,prt:3d_z_rotate 18,180-prt:prt=prt+0.5: ' mouvement rotatif fermeture des portes d'entrée
until prt>=360
play 22: ' bruitage de la herse qui se baisse
repeat
  3d_y_position 15,hrs:hrs=hrs-0.4: ' MOUVEMENT fermeture DE LA HERSE à l'entrée
until hrs<=-1
' LE HÉROS REVIENT VERS LA HERSE DE L'ENTRÉE QUI S'EST FERMÉE
av=0:3d_hide pk:pk=131:3d_show pk
repeat
  3d_move 4,0.5:gosub pospk:gosub affiche:av=av+0.5
until av>=20
' LE HÉROS REFAIT 1/2 TOUR
wait 1000:gosub droite:gosub droite
timer_on 4
show 2
return
' ******************************************************************************
' LA SORTIE DU LABYRINTHE
sortie:
timer_off_all
3d_hide pk:pk=33:3d_position pk,x,7,z+5:3d_show pk
prt=0:hrs=-1:av=90
repeat
  3d_z_rotate 19,prt:3d_z_rotate 20,180-prt:prt=prt+0.5: ' mouvement rotatif ouverture des portes de sortie
until prt>=90
repeat
  3d_y_position 22,hrs:hrs=hrs+0.5: ' MOUVEMENT ouverture DE LA HERSE à la sortie
until hrs>=30
repeat
  3d_x_rotate 21,av:av=av-0.5: ' MOUVEMENT ouverture DU PONT-LEVIS de la sortie
until av<=0
delete 27:delete 28:delete 29:delete 30
file_load 26,chemin$+"entrée.mp3":play 26
3d_hide pk:pk=131:3d_show pk
repeat
  3d_move 4,0.5:av=av+0.5:gosub affiche:gosub pospk:wait 40
until av>=80
gosub pxz:av=270
while scancode=0
      3d_hide pk:pk=pk+1:if pk>130 then pk=34
      3d_position pk,x,7,z:3d_show pk:3d_z_rotate pk,wrap_value(av)
      av=av+3:wait 40
end_while
message "BRAVO, VOTRE HÉROS EST SORTI DU LABYRINTHE!":goto quit

' GESTION DU CHAINAGE SUR LE PROGRAMME SUIVANT ICI <-----------
' POUR LA 3ème PARTIE DE L'AVENTURE
' ******************************************************************************
' LA SORTIE DU PROGRAMME
fin:
if message_confirmation_yes_no("Voulez-vous vraiment quitter ?")<>1 then return
quit:
timer_off_all
delete 4
delete 3
delete 2
delete 1
if object_exists(30)=1 then delete 30
if object_exists(29)=1 then delete 29
if object_exists(28)=1 then delete 28
if object_exists(27)=1 then delete 27
delete 26
delete 25
delete 24
delete 23
delete 22
delete 21
delete 20
terminate
Télécharger ici le fichier zip:
FORT_LABYRINTH
Il ne me reste plus qu'à vous souhaiter un vraiment très bon NOËL.
santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa santa
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyDim 25 Déc 2011 - 18:35

Désolé, Bignono, j'ai mis du temps à répondre (fètes obligent), mais bon, je ne peux pas commenter correctement, mon DELL D600 utilisé en vacances ne suffit pas à faire tourner le programme. J'ai essayé de régler, mais je renonce.
Je n'arrivais pas à modifier ou à lancer le jeu à cause du menu. J'ai donc fais sauter le menu. J'ai essayer de régler les valeur, le personnage cours au alenti vers le chateau mais à un moment, ça bloque ...
Il faudra que j'attende la semaine prochaine le retour à la maison pour tester sur l'ordi fixe, je pense...

Bon pour ceux qui ont des machines lentes, je donne le début du source modifié 'machines lentes' mais c'est insuffisants pour que le personnage arrive au labyrinthe... Sans doute d'autres modifs à faire mais là, je n'ai plus le temps pour le moment, sinon la famille de ma femme risquerait de râler ...

Code:
' ******************************************************************************
' ******************************************************************************
' ************************ FORT LABYRINTH version 1.13 *************************
' ********************** CRÉÉ PAR bignono le 25/12/2011 ************************
' **************************** EN BASIC PANORAMIC ******************************
' ******************************************************************************
' ******************************************************************************
' ********************* 2ème partie de mon jeu d'aventure **********************
' ******************************************************************************
' ******************************************************************************
' ******************************************************************************

dim c_espace,tch,tpm1,tpm2,opt(4),c(4)
dim ang,av,b,bs,d,dtn,gd,hrs,h,i,j,k,m,n,pas,pasv,pk,r,s,v,prt,pt,rot,w,x,y,z
dim chemin$,txt1$,txt2$,txt3$,txt4$,txt5$,txt6$,txt7$,titre1$,titre2$,titre3$
label affiche,droite,gauche,herodtn,intro,lab,moteur,music,pan1,pan2,pan4,pan8
label pivot,pospk,pxz,quit,r1,r2,r3,r4,r5,r6,r7,sortie,fin,trace
chemin$ ="C:\Program Files\Panoramic Editor V 0.9.20\sources\Fort_Labyrinthe\"
titre1$="Bignono présente":titre2$="* * * F O R T - L A B Y R I N T H * * *"
titre3$="Programme et musique de Bignono"
txt1$="Patientez, chargement en cours...":txt2$="Construction de la forteresse..."
txt3$="Création du héros...":txt4$="Création du monstre...": ' Création du monstre n°1 n°2 n°3
txt5$="Génération du labyrinthe...":txt6$=" Création des murs dans la salle "
txt7$="Initialisation du programme..."

sound 20:file_load 20,chemin$+"cours1.mp3"
sound 21:file_load 21,chemin$+"cours2.mp3"
sound 22:file_load 22,chemin$+"hersebaisser.mp3"
sound 23:file_load 23,chemin$+"herselever.mp3"
sound 24:file_load 24,chemin$+"pontlevisfermer.mp3"
sound 25:file_load 25,chemin$+"pontlevisbaisser3.mp3"
sound 26:file_load 26,chemin$+"chargement.mp3":play 26
sound 27:file_load 27,chemin$+"mus1.mp3"
sound 28:file_load 28,chemin$+"mus2.mp3"
sound 29:file_load 29,chemin$+"mus3.mp3"
sound 30:file_load 30,chemin$+"mus4.mp3"

' ******************************************************************************
' ************************ INITIALISATION DES VARIABLES ************************
' ******************************************************************************
' ************ h et v représentent les dimensions du labyrinthe ****************
' ****** pas : sert à règler la vitesse de déplacement dans le labyrinthe ******
' ****** pasv: sert à règler la vitesse du zoom vertical ***********************
h=21:v=20:n=h*v-1:h=h+1:v=v+1:d=1:w=13:pas=1.5:pasv=10:c_espace=0
dim a(h+1,v+1),mur(h+1,v+1),trc(h,v)
gosub lab

label dbug
DIM debug : debug =0
IF Debug =1
    FORM 500 : WIDTH 500, 150 : HEIGHT 500, 200 : TOP 500, 3 : LEFT 500, 3
    ALPHA 501 : PARENT 501, 500 : HEIGHT 501, 15 : TOP 501, 3 : LEFT 501, 3
    ALPHA 502 : PARENT 502, 500 : HEIGHT 502, 15 : TOP 502, 20 : LEFT 502, 3
    ALPHA 503 : PARENT 503, 500 : HEIGHT 503, 15 : TOP 503, 37 : LEFT 503, 3
    ALPHA 504 : PARENT 504, 500 : HEIGHT 504, 15 : TOP 504, 54 : LEFT 504, 3
    ALPHA 505 : PARENT 505, 500 : HEIGHT 505, 15 : TOP 505, 71 : LEFT 505, 3
    ALPHA 506 : PARENT 506, 500 : HEIGHT 506, 15 : TOP 506, 88 : LEFT 506, 3
    ALPHA 507 : PARENT 507, 500 : HEIGHT 507, 15 : TOP 507, 105 : LEFT 507, 3
    ALPHA 508 : PARENT 508, 500 : HEIGHT 508, 15 : TOP 508, 122 : LEFT 508, 3
    ALPHA 509 : PARENT 509, 500 : HEIGHT 509, 15 : TOP 509, 139 : LEFT 509, 3
END_IF

full_space 0:color 0,0,0,0:' border_hide 0

scene3d 1:3d_target_is 1:hide 1:full_space 1:light_position 0,1500,0:3d_skybox 1
3d_load_texture_right 1,chemin$+"sk1.bmp"
3d_load_texture_back 1,chemin$+"sk2.bmp"
3d_load_texture_top 1,chemin$+"sk3.bmp"
3d_load_texture_left 1,chemin$+"sk4.bmp"
3d_load_texture_front 1,chemin$+"sk5.bmp"
3d_load_texture_bottom 1,chemin$+"sk6.bmp"
3d_plane 2:3d_scale 2,1000,1000,1:3d_x_rotate 2,90:3d_y_position 2,-0.25
3d_load_texture 2,chemin$+"herbe.JPG":3d_u_tile 2,400:3d_v_tile 2,400
3d_plane 3:3d_scale 3,42,40,1:3d_x_rotate 3,90:3d_position 3,240,0,230
3d_load_texture 3,chemin$+"terre.jpg":3d_u_tile 3,10:3d_v_tile 3,10

3d_cube 4,1:3d_hide 4:3d_mesh 5:3d_hide 5: ' CRÉATION DES VÉHICULES MOTEUR ET CAMÉRA
gosub dbug
' ******************************************************************************
' ****************      CONSTRUCTION DE LA FORTERESSE  ************************
' ******************************************************************************
print_locate screen_x/2-(text_width(txt2$,0)/2),screen_y/2-3*(text_height(txt2$,0)/2):print txt2$
' LES 8 TOURS
3d_mesh 6:3d_load_object 6,chemin$+"tr.3ds":3d_load_texture 6,chemin$+"tr.jpg"
3d_position 6,240,0,230:3d_scale 6,42,44,32:3d_x_rotate 6,90:3d_z_rotate 6,180
3d_mesh 7:3d_load_object 7,chemin$+"gués.3ds":3d_load_texture 7,chemin$+"gués.bmp"
3d_position 7,240,0,230:3d_scale 7,42,44,32:3d_x_rotate 7,90:3d_z_rotate 7,180
' les remparts latéraux à l'entrée
3d_box 8,42,72,20:3d_position 8,200,36,-33:3d_y_rotate 8,90:3d_load_texture 8,chemin$+"m1r.jpg"
3d_box 9,42,72,20:3d_position 9,288,36,-33:3d_y_rotate 9,90:3d_load_texture 9,chemin$+"m1r.jpg"
' les blocs remparts aux entrées et à la sortie
3d_box 10,22,72,20:3d_position 10,220,36,-80:3d_load_texture 10,chemin$+"m8r.jpg": ' rempart latéral pont levis et portes entrée
3d_box 11,22,72,20:3d_position 11,260,36,-80:3d_load_texture 11,chemin$+"m8r.jpg": ' rempart latéral pont levis et portes entrée
3d_box 12,21,24,20:3d_position 12,240,60,-80:3d_load_texture 12,chemin$+"m8.jpg": ' bloc au-dessus pont levis et portes entrée
3d_box 13,21,24,20:3d_position 13,240,60,20:3d_load_texture 13,chemin$+"m8.jpg" : ' bloc au-dessus herse
3d_box 14,21,24,20:3d_position 14,240,60,440:3d_load_texture 14,chemin$+"m8.jpg": ' bloc au-dessus portes sortie
' LA HERSE A L'ENTRÉE
3d_mesh 15:3d_position 15,240,-1,13:3d_x_rotate 15,90:3d_scale 15,1,1,1.15
3d_load_object 15,chemin$+"herse.3ds":3d_load_texture 15,chemin$+"herse.bmp"
' LE PONT-LEVIS A L'ENTRÉE
3d_mesh 16:3d_position 16,240,0,-90:3d_x_rotate 16,90:3d_scale 16,1,1,1.1
3d_load_object 16,chemin$+"pntlvs.3ds":3d_load_texture 16,chemin$+"pntlvs.jpg"
' LES PORTES D'ENTRÉE
3d_mesh 17:3d_position 17,227,0,-70:3d_x_rotate 17,90:3d_scale 17,1,1,1.1
3d_load_object 17,chemin$+"porte.3ds":3d_load_texture 17,chemin$+"porte.jpg"
3d_mesh 18:3d_position 18,252,0,-70:3d_x_rotate 18,90:3d_z_rotate 18,180:3d_scale 18,1,1,1.1
3d_load_object 18,chemin$+"porte.3ds":3d_load_texture 18,chemin$+"porte.jpg"
' LES PORTES DE SORTIE
3d_mesh 19:3d_position 19,230,0,442:3d_x_rotate 19,90:3d_scale 19,0.78,0.75,1.1
3d_load_object 19,chemin$+"porte.3ds":3d_load_texture 19,chemin$+"porte.jpg"
3d_mesh 20:3d_position 20,249,0,442:3d_x_rotate 20,90:3d_z_rotate 20,180:3d_scale 20,0.78,0.75,1.1
3d_load_object 20,chemin$+"porte.3ds":3d_load_texture 20,chemin$+"porte.jpg"
' LE PONT-LEVIS A LA SORTIE
3d_mesh 21:3d_position 21,240,0,450:3d_x_rotate 21,90:3d_scale 21,1,1,1.1
3d_load_object 21,chemin$+"pntlvs.3ds": 3d_load_texture 21,chemin$+"pntlvs.jpg"
' LA HERSE A LA SORTIE
3d_mesh 22:3d_position 22,240,-1,446:3d_x_rotate 22,90:3d_scale 22,1,1,1.15
3d_load_object 22,chemin$+"herse.3ds": 3d_load_texture 22,chemin$+"herse.bmp"
' TEXTE 3D LABYRINTH
 3d_mesh 23:3d_load_object 23,chemin$+"Labyrinth.3ds":3d_load_texture 23,chemin$+"3d_L1.jpg"
3d_position 23,240,30,-250:3d_x_rotate 23,90:3d_scale 23,30,30,30:3d_z_rotate 23,180:3d_hide 23
' TEXTE 3D FORT
3d_mesh 24:3d_load_object 24,chemin$+"Fort.3ds":3d_load_texture 24,chemin$+"3d_L1.jpg"
3d_position 24,240,30,-250:3d_x_rotate 24,90:3d_scale 24,30,30,30:3d_z_rotate 24,180:3d_hide 24
' LE MENU OPTION EN LETTRES 3D AVEC TEXTURES
font_name 0,"Times New Roman":font_size 0,50:font_bold 0:font_color 0,255,0,0
print_locate screen_x/2-(text_width(titre1$,0)/2),screen_y/2-12*(text_height(titre1$,0)/2):print titre1$:wait 1000
print_locate screen_x/2-(text_width(titre2$,0)/2),screen_y/2-10*(text_height(titre2$,0)/2):print titre2$:wait 1000
print_locate screen_x/2-(text_width(titre3$,0)/2),screen_y/2-8*(text_height(titre3$,0)/2):print titre3$:wait 1000
print_locate screen_x/2-(text_width(txt1$,0)/2),screen_y/2-5*(text_height(txt1$,0)/2):print txt1$:wait 1000

3d_mesh 25:3d_load_object 25,chemin$+"opt1_oui.3ds":3d_position 25,240,60,-225
3d_mesh 26:3d_load_object 26,chemin$+"opt1_non.3ds":3d_position 26,240,60,-225
3d_mesh 27:3d_load_object 27,chemin$+"opt2_oui.3ds":3d_position 27,240,50,-225
3d_mesh 28:3d_load_object 28,chemin$+"opt2_non.3ds":3d_position 28,240,50,-225
3d_mesh 29:3d_load_object 29,chemin$+"opt3_oui.3ds":3d_position 29,240,40,-225
3d_mesh 30:3d_load_object 30,chemin$+"opt3_non.3ds":3d_position 30,240,40,-225
3d_mesh 31:3d_load_object 31,chemin$+"opt4_oui.3ds":3d_position 31,240,30,-225
3d_mesh 32:3d_load_object 32,chemin$+"opt4_non.3ds":3d_position 32,240,30,-225
for b=25 to 32:3d_load_texture b,chemin$+"3d_L3.jpg":3d_x_rotate b,90
3d_scale b,5,5,5:3d_z_rotate b,180:3d_hide b:next b

print_locate screen_x/2-(text_width(txt3$,0)/2),screen_y/2-1*(text_height(txt3$,0)/2):print txt3$
' CRÉATION DU HÉROS
3d_mesh 33:3d_load_object 33,chemin$+"pk001.3ds"
3d_mesh 34:3d_load_object 34,chemin$+"pk002.3ds"
3d_mesh 35:3d_load_object 35,chemin$+"pk003.3ds"
3d_mesh 36:3d_load_object 36,chemin$+"pk004.3ds"
3d_mesh 37:3d_load_object 37,chemin$+"pk005.3ds"
3d_mesh 38:3d_load_object 38,chemin$+"pk006.3ds"
3d_mesh 39:3d_load_object 39,chemin$+"pk007.3ds"
3d_mesh 40:3d_load_object 40,chemin$+"pk008.3ds"
3d_mesh 41:3d_load_object 41,chemin$+"pk009.3ds"
3d_mesh 42:3d_load_object 42,chemin$+"pk010.3ds"
3d_mesh 43:3d_load_object 43,chemin$+"pk011.3ds"
3d_mesh 44:3d_load_object 44,chemin$+"pk012.3ds"
3d_mesh 45:3d_load_object 45,chemin$+"pk013.3ds"
3d_mesh 46:3d_load_object 46,chemin$+"pk014.3ds"
3d_mesh 47:3d_load_object 47,chemin$+"pk015.3ds"
3d_mesh 48:3d_load_object 48,chemin$+"pk016.3ds"
3d_mesh 49:3d_load_object 49,chemin$+"pk017.3ds"
3d_mesh 50:3d_load_object 50,chemin$+"pk018.3ds"
3d_mesh 51:3d_load_object 51,chemin$+"pk019.3ds"
3d_mesh 52:3d_load_object 52,chemin$+"pk020.3ds"
3d_mesh 53:3d_load_object 53,chemin$+"pk021.3ds"
3d_mesh 54:3d_load_object 54,chemin$+"pk022.3ds"
3d_mesh 55:3d_load_object 55,chemin$+"pk023.3ds"
3d_mesh 56:3d_load_object 56,chemin$+"pk024.3ds"
3d_mesh 57:3d_load_object 57,chemin$+"pk025.3ds"
3d_mesh 58:3d_load_object 58,chemin$+"pk026.3ds"
3d_mesh 59:3d_load_object 59,chemin$+"pk027.3ds"
3d_mesh 60:3d_load_object 60,chemin$+"pk028.3ds"
3d_mesh 61:3d_load_object 61,chemin$+"pk029.3ds"
3d_mesh 62:3d_load_object 62,chemin$+"pk030.3ds"
3d_mesh 63:3d_load_object 63,chemin$+"pk031.3ds"
3d_mesh 64:3d_load_object 64,chemin$+"pk032.3ds"
3d_mesh 65:3d_load_object 65,chemin$+"pk033.3ds"
3d_mesh 66:3d_load_object 66,chemin$+"pk034.3ds"
3d_mesh 67:3d_load_object 67,chemin$+"pk035.3ds"
3d_mesh 68:3d_load_object 68,chemin$+"pk036.3ds"
3d_mesh 69:3d_load_object 69,chemin$+"pk037.3ds"
3d_mesh 70:3d_load_object 70,chemin$+"pk038.3ds"
3d_mesh 71:3d_load_object 71,chemin$+"pk039.3ds"
3d_mesh 72:3d_load_object 72,chemin$+"pk040.3ds"
3d_mesh 73:3d_load_object 73,chemin$+"pk041.3ds"
3d_mesh 74:3d_load_object 74,chemin$+"pk042.3ds"
3d_mesh 75:3d_load_object 75,chemin$+"pk043.3ds"
3d_mesh 76:3d_load_object 76,chemin$+"pk044.3ds"
3d_mesh 77:3d_load_object 77,chemin$+"pk045.3ds"
3d_mesh 78:3d_load_object 78,chemin$+"pk046.3ds"
3d_mesh 79:3d_load_object 79,chemin$+"pk047.3ds"
3d_mesh 80:3d_load_object 80,chemin$+"pk048.3ds"
3d_mesh 81:3d_load_object 81,chemin$+"pk049.3ds"
3d_mesh 82:3d_load_object 82,chemin$+"pk050.3ds"
3d_mesh 83:3d_load_object 83,chemin$+"pk051.3ds"
3d_mesh 84:3d_load_object 84,chemin$+"pk052.3ds"
3d_mesh 85:3d_load_object 85,chemin$+"pk053.3ds"
3d_mesh 86:3d_load_object 86,chemin$+"pk054.3ds"
3d_mesh 87:3d_load_object 87,chemin$+"pk055.3ds"
3d_mesh 88:3d_load_object 88,chemin$+"pk056.3ds"
3d_mesh 89:3d_load_object 89,chemin$+"pk057.3ds"
3d_mesh 90:3d_load_object 90,chemin$+"pk058.3ds"
3d_mesh 91:3d_load_object 91,chemin$+"pk059.3ds"
3d_mesh 92:3d_load_object 92,chemin$+"pk060.3ds"
3d_mesh 93:3d_load_object 93,chemin$+"pk061.3ds"
3d_mesh 94:3d_load_object 94,chemin$+"pk062.3ds"
3d_mesh 95:3d_load_object 95,chemin$+"pk063.3ds"
3d_mesh 96:3d_load_object 96,chemin$+"pk064.3ds"
3d_mesh 97:3d_load_object 97,chemin$+"pk065.3ds"
3d_mesh 98:3d_load_object 98,chemin$+"pk066.3ds"
3d_mesh 99:3d_load_object 99,chemin$+"pk067.3ds"
3d_mesh 100:3d_load_object 100,chemin$+"pk068.3ds"
3d_mesh 101:3d_load_object 101,chemin$+"pk069.3ds"
3d_mesh 102:3d_load_object 102,chemin$+"pk070.3ds"
3d_mesh 103:3d_load_object 103,chemin$+"pk071.3ds"
3d_mesh 104:3d_load_object 104,chemin$+"pk072.3ds"
3d_mesh 105:3d_load_object 105,chemin$+"pk073.3ds"
3d_mesh 106:3d_load_object 106,chemin$+"pk074.3ds"
3d_mesh 107:3d_load_object 107,chemin$+"pk075.3ds"
3d_mesh 108:3d_load_object 108,chemin$+"pk076.3ds"
3d_mesh 109:3d_load_object 109,chemin$+"pk077.3ds"
3d_mesh 110:3d_load_object 110,chemin$+"pk078.3ds"
3d_mesh 111:3d_load_object 111,chemin$+"pk079.3ds"
3d_mesh 112:3d_load_object 112,chemin$+"pk080.3ds"
3d_mesh 113:3d_load_object 113,chemin$+"pk081.3ds"
3d_mesh 114:3d_load_object 114,chemin$+"pk082.3ds"
3d_mesh 115:3d_load_object 115,chemin$+"pk083.3ds"
3d_mesh 116:3d_load_object 116,chemin$+"pk084.3ds"
3d_mesh 117:3d_load_object 117,chemin$+"pk085.3ds"
3d_mesh 118:3d_load_object 118,chemin$+"pk086.3ds"
3d_mesh 119:3d_load_object 119,chemin$+"pk087.3ds"
3d_mesh 120:3d_load_object 120,chemin$+"pk088.3ds"
3d_mesh 121:3d_load_object 121,chemin$+"pk089.3ds"
3d_mesh 122:3d_load_object 122,chemin$+"pk090.3ds"
3d_mesh 123:3d_load_object 123,chemin$+"pk091.3ds"
3d_mesh 124:3d_load_object 124,chemin$+"pk092.3ds"
3d_mesh 125:3d_load_object 125,chemin$+"pk093.3ds"
3d_mesh 126:3d_load_object 126,chemin$+"pk094.3ds"
3d_mesh 127:3d_load_object 127,chemin$+"pk095.3ds"
3d_mesh 128:3d_load_object 128,chemin$+"pk096.3ds"
3d_mesh 129:3d_load_object 129,chemin$+"pk097.3ds"
3d_mesh 130:3d_load_object 130,chemin$+"pk098.3ds"
3d_mesh 131:3d_load_object 131,chemin$+"pk099.3ds"
3d_mesh 132:3d_load_object 132,chemin$+"pk100.3ds"
3d_mesh 133:3d_load_object 133,chemin$+"pk101.3ds"
3d_mesh 134:3d_load_object 134,chemin$+"pk102.3ds"
3d_mesh 135:3d_load_object 135,chemin$+"pk103.3ds"
3d_mesh 136:3d_load_object 136,chemin$+"pk104.3ds"
3d_mesh 137:3d_load_object 137,chemin$+"pk105.3ds"
3d_mesh 138:3d_load_object 138,chemin$+"pk106.3ds"
3d_mesh 139:3d_load_object 139,chemin$+"pk107.3ds"
3d_mesh 140:3d_load_object 140,chemin$+"pk108.3ds"
3d_mesh 141:3d_load_object 141,chemin$+"pk109.3ds"
3d_mesh 142:3d_load_object 142,chemin$+"pk110.3ds"
3d_mesh 143:3d_load_object 143,chemin$+"pk111.3ds"
3d_mesh 144:3d_load_object 144,chemin$+"pk112.3ds"
3d_mesh 145:3d_load_object 145,chemin$+"pk113.3ds"
3d_mesh 146:3d_load_object 146,chemin$+"pk114.3ds"
pk=32
repeat
  pk=pk+1:3d_load_texture pk,chemin$+"pk.bmp":3d_scale pk,0.25,0.25,0.25
  3d_x_rotate pk,90:3d_z_rotate pk,270:3d_hide pk:3d_position pk,240,7,-290
until pk>=146:pk=33

' GARGOYLES
3d_mesh 147:3d_load_object 147,chemin$+"gargoyle.3ds"
3d_scale 147,0.75,0.75,0.75:3d_x_rotate 147,90:3d_y_rotate 147,30
3d_position 147,232,18,20:3d_color 147,0,50,40
3d_mesh 148:3d_load_object 148,chemin$+"gargoyle.3ds"
3d_scale 148,0.75,0.75,0.75
3d_x_rotate 148,90:3d_y_rotate 148,330:3d_z_rotate 148,180
3d_position 148,248,18,20:3d_color 148,0,50,40
' DRAGONS
3d_box 149,20,5,40:3d_position 149,220,0,-30:3d_load_texture 149,chemin$+"3d_L4.jpg": ' piedestal marbre droit
3d_box 150,20,5,40:3d_position 150,268,0,-30:3d_load_texture 150,chemin$+"3d_L4.jpg": ' piedestal marbre gauche
' dragon 1 droit
3d_mesh 151:3d_load_object 151,chemin$+"dragdroit.3ds":3d_color 151,0,25,15
3d_scale 151,40,40,40:3d_y_rotate 151,150
3d_x_rotate 151,90:3d_position 151,218,2,-30
' dragon 2 gauche
3d_mesh 152:3d_load_object 152,chemin$+"dragauche.3ds":3d_color 152,0,25,15
3d_scale 152,40,40,40:3d_y_rotate 152,210
3d_x_rotate 152,90:3d_position 152,272,2,-30

' ******************************************************************************
' ****************      CONSTRUCTION DU LABYRINTHE      ************************
' ******************************************************************************
' 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
print_locate screen_x/2-(text_width(txt5$,0)/2),screen_y/2+3*(text_height(txt5$,0)/2):print txt5$
for i=1 to h:a(i,1)=8:next i:for j=1 to v:a(1,j)=1:next j
for j=2 to v
  for i=2 to h: trc(i,j)=0
if (i=(int(h/2)+1) and j=2) then a(i,j)=a(i,j)-8
if (i=(int(h/2)+1) and j=v) then a(i,j)=a(i,j)-2
  txt6$=left$(txt6$,33)+str$(i*j)+"..."
  print_locate screen_x/2-(text_width(txt6$,0)/2),screen_y/2+5*(text_height(txt6$,0)/2):print txt6$

    select a(i,j)
      case 1
        gosub pan1
      case 2
        gosub pan2
      case 3
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan2
      case 4
        gosub pan4
      case 5
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan4
      case 6
        gosub pan2:gosub pan4
      case 7
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan2:gosub pan4
      case 8
        gosub pan8
      case 9
        if a(i-1,j)<4 or a(i-1,j)>7 and a(i-1,j)<12 then gosub pan1
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 10
        gosub pan2
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 11
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan2
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 12
        gosub pan4
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 13
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan4
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 14
        gosub pan2:gosub pan4
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
    end_select
  next i
next j

gosub dbug
print_locate screen_x/2-text_width(txt7$,0)/2,screen_y/2+7*text_height(txt7$,0)/2:print txt7$

' ******************************************************************************
' ******************      CRÉATION DE LA BOUSSOLE      ************************
' ******************************************************************************
scene3d 2:3d_target_is 2:hide 2:width 2,160:height 2,160
left 2,screen_x-180:top 2,screen_y-240:color 2,0,0,0
3d_cylinder number_3d_objects+1,0.25,1,1
3d_load_texture number_3d_objects,chemin$+"étui.jpg"
3d_x_rotate number_3d_objects,90
3d_cylinder number_3d_objects+1,0.26,0.9,0.9
3d_load_texture number_3d_objects,chemin$+"cadran.jpg"
3d_x_rotate number_3d_objects,270
3d_mesh number_3d_objects+1
3d_load_object number_3d_objects,chemin$+"aiguille.3ds"
3d_load_texture number_3d_objects,chemin$+"aiguille.bmp"
3d_x_rotate number_3d_objects,270:3d_y_rotate number_3d_objects,180
bs=number_3d_objects
3d_target_is 1

' ******************************************************************************
' ** Initialisation position départ et création d'1 timer pour l'intro du jeu **
' ** Création d'1 second timer pour gèrer les déplacements dans le labyrinthe **
' ******************************************************************************
i=int(h/2)+1:j=1:dtn=1

' ! INFO: en dessous de 17 le timer_interval 3 est inopérant & le prog ralenti !
timer 3:timer_interval 3,200:on_timer 3,intro
timer 4:timer_interval 4,50:on_timer 4,moteur
show 1
end

' ******************************************************************************
' *****************    LE PROGRAMME PRINCIPAL    ******************************
' ******************************************************************************
moteur:

timer_off 4

gosub dbug

if m<>0
  gosub music
  if tpm2-tpm1>60 then tpm1=tpm2:m=m+1:play m:if m>29 then m=26
end_if

if c_espace=1 and opt(2)=27 then gosub trace
timer_on 4:tch=scancode:timer_off 4
select tch
  case 0: ' LE HÉROS EN MOUVEMENT RESTE EN POSITION STATIQUE
      3d_hide pk:pk=pk+1:if pk>130 then pk=33
      3d_position pk,x,7,z:3d_show pk
  case 27:gosub fin:  ' SORTIE PROGRAMME
  case 32:c_espace=1: ' AFFICHAGE DU PLAN DU LABYRINTHE
  case 37:gosub gauche: ' FLECHE GAUCHE = ROTATION A GAUCHE
  case 39:gosub droite: ' FLECHE DROITE = ROTATION A DROITE
  case 38:  ' FLECHE HAUT = DTN DEFINIT LA DIRECTION NORD, OUEST, SUD OU EST
  3d_hide pk:pk=131:3d_show pk
  select dtn
    case 1
    if j < v+1
        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*20:j=j+1:gd=j*20
              repeat
                pt=pt+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until pt>=gd
        end_if
    end_if
    case 2
    if i < h  and j > 1
        if a(i,j)<4 or a(i,j)>7 and a(i,j)<12
          pt=i*20:i=i+1:gd=i*20
              repeat
                pt=pt+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until pt>=gd
        end_if
    end_if
    case 3
    if j > 2
        if a(i,j)<8
            pt=j*20:j=j-1:gd=j*20
              repeat
                gd=gd+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until gd>=pt
        end_if
    end_if
    case 4
    if i > 2 and j > 1
        if odd(a(i,j))=0
            pt=i*20:i=i-1:gd=i*20
              repeat
                gd=gd+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until gd>=pt
        end_if
    end_if
  end_select
end_select

' MÉMORISATION DE SON PASSAGE PAR DES SPHÈRES ORANGES ==> OPTION PETIT POUCET
' if opt(1)=25
'  if trc(i,j)=0 and j>1
'    3d_sphere number_3d_objects+1,2
'    3d_position number_3d_objects,i*20,1,j*20
'    3d_color number_3d_objects,224,128,32
'    trc(i,j)=number_3d_objects
'  end_if
' end_if

' ROTATION DU HÉROS DANS LE SENS DU DÉPLACEMENT
 gosub herodtn

' TEST DE SORTIE DU LABYRINTHE
if j=v and i=(int(h/2)+1) and dtn=1 then goto sortie

timer_on 4

return

' ******************************************************************************
' *********************    LES ROUTINES      ***********************************
' ******************************************************************************

' CALCUL DES POSITIONS DES VÉHICULES MOTEUR ET CAMÉRA
affiche:
3d_position 5,o3d_x_position(4),o3d_y_position(4),o3d_z_position(4):3d_rotate 5,o3d_x_rotate(4),o3d_y_rotate(4),o3d_z_rotate(4)
3d_move 5,1:cam_position o3d_x_position(4),w,o3d_z_position(4):point_position o3d_x_position(5),13,o3d_z_position(5)
return

' CRÉATION DES MURS DU LABYRINTHE
pan1:
if i=2
  3d_box number_3d_objects+1,22,72,20:3d_position number_3d_objects,(i*20)-20,36,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20)-10,10,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1.jpg"
end_if
return
pan2:
if j=v
  3d_box number_3d_objects+1,20.9,72,20:3d_position number_3d_objects,(i*20),36,(j*20)+20:3d_load_texture number_3d_objects,chemin$+"m8r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20),10,(j*20)+10:3d_load_texture number_3d_objects,chemin$+"m8.jpg"
end_if
return
pan4:
if i=h
  3d_box number_3d_objects+1,22,72,20:3d_position number_3d_objects,(i*20)+20,36,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20)+10,10,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1.jpg"
end_if
return
pan8:
if j=2
  3d_box number_3d_objects+1,20.9,72,20:3d_position number_3d_objects,(i*20),36,(j*20)-20:3d_load_texture number_3d_objects,chemin$+"m8r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20),10,(j*20)-10:3d_load_texture number_3d_objects,chemin$+"m8.jpg"
end_if
return

' VISION SATELLITE DU LABYRINTHE EN 3D
trace:
  repeat
      w=w+pasv:cam_position o3d_x_position(4),w,o3d_z_position(4):display
  until w>=600

repeat
  if scancode=27 then gosub fin
  if scancode=37 then gosub gauche
  if scancode=39 then gosub droite
until scancode=32

repeat
  w=w-pasv:cam_position o3d_x_position(4),w,o3d_z_position(4):display
until w<=13
c_espace=0
return

' ROTATION A GAUCHE
gauche:
ang=rot+90:dtn=dtn+1:if dtn>4 then dtn=1
    repeat
        rot=rot+6*pas:3d_y_rotate 4,rot:3d_y_rotate bs,rot+180
        if w>13 then gosub pivot
        gosub affiche
    until rot>=ang
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 4,rot:3d_y_rotate bs,rot+180
        if w>13 then gosub pivot
        gosub affiche
    until rot<=ang
return

' ROTATION DE LA CAMÉRA LORS DE LA VISION SATELLITE
pivot:
cam_position o3d_x_position(4),o3d_y_position(4)+w,o3d_z_position(4)
return
' ROUTINES DE RECHERCHE DES POSITIONS X ET Z DU HÉROS
pospk:
3d_hide pk:pk=pk+1:if pk>146 then pk=131
if pk=138 then play 20
if pk=146 then play 21
gosub herodtn
3d_position pk,x,7,z:3d_show pk
return
herodtn:
  if dtn=1 then x=o3d_x_position(4):z=o3d_z_position(4)+5:3d_z_rotate pk,270
  if dtn=2 then x=o3d_x_position(4)+5:z=o3d_z_position(4):3d_z_rotate pk,0
  if dtn=3 then x=o3d_x_position(4):z=o3d_z_position(4)-5:3d_z_rotate pk,90
  if dtn=4 then x=o3d_x_position(4)-5:z=o3d_z_position(4):3d_z_rotate pk,180
return
pxz:
x=o3d_x_position(pk):z=o3d_z_position(pk)
return

' GÉNÉRATION DU LABYRINTHE
lab:

for j=1 to v+1:a(1,j)=4:a(h+1,j)=1:next j
for i=2 to h:a(i,v+1)=8:a(i,1)=2:for j=2 to v:a(i,j)=15:next j:next i
r=int(h/2+1):s=int(v/2+1):a(r,s)=15
for k=1 to n
r1:
  i=0
  if a(r-1,s)=15 then i=i+1 :c(i)=1
  if a(r,s-1)=15 then i=i+1 :c(i)=2
  if a(r+1,s)=15 then i=i+1 :c(i)=3
  if a(r,s+1)=15 then i=i+1 :c(i)=4
  if i=0 then goto r2
  if i<>1 then i=int(rnd(i)+1)
  select c(i)
      case 1 :a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2):r=r-1:a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4
      case 2 :a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8:s=s-1:a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2
      case 3 :a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4:r=r+1:a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2)
      case 4 :a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2:s=s+1:a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8
  end_select
  goto r7
r2:
  if d=-1 then goto r3
  if r<>h then goto r5
  if s<>v then goto r4
  r=2:s=2:goto r6
r3:
  if r<>2 then goto r5
  if s<>v then goto r4
  r=h:s=2: goto r6
r4:
  s=s+1:d=-1*d:goto r6
r5:
  r=r+d
r6:
  if a(r,s)=15 then goto r2
  goto r1
r7:
  mur(r,s)=int(rnd(6)+1)
  if mur(r,s)=mur(r-1,s) or mur(r,s)=mur(r+1,s) or mur(r,s)=mur(r,s-1) or mur(r,s)=mur(r,s+1) then goto r7
next k
return

' GESTION DE LA MUSIQUE
music:
 tpm2=(val(left$(time$,2))*3600)+(val(mid$(time$,4,2))*60)+val(right$(time$,2))
return

' ******************************************************************************
' ******************************************************************************
' ******************* routine de DEBUGAGE **************************************
' ******************************************************************************
' ******************************************************************************
dbug:
    IF debug =1
        CAPTION 501, "number_3d_objects=" + STR$(number_3d_objects)
        CAPTION 502, "pk=" + STR$(pk)
        CAPTION 503, "number_objects=" + STR$(number_objects)
'        caption 504, "z=" + str$(z)
        caption 505, "dtn=" + str$(dtn)
        caption 506, "a(i,j)=" + str$(a(i,j))
        caption 507, "a(i,v)=" + str$(a(i,v))
        caption 508, "i=" + str$(i)
        caption 509, "j=" + str$(j)
    END_IF
return

' ******************************************************************************
' DÉBUT DU JEU --> NOM DU JEU, RÈGLAGE OPTIONS & ENTRÉE DANS LABYRINTHE
' ******************************************************************************
intro:
timer_off_all
av=180:hrs=-1:prt=360:pk=33:m=26
3d_position 4,((h/2)*20)-(3*odd(h))+20,15,-300:3d_show 23:3d_show 24:3d_show 33
gosub affiche
' file_load 26,chemin$+"FORT LABYRINTH.mp3":gosub music:tpm1=tpm2:play 26
' LE NOM DU JEU EN PIERRE TOURNOIE ET LE HÉROS EN MOUVEMENT RESTE STATIQUE
while scancode=0
  3d_z_rotate 23,av:3d_z_rotate 24,abs(av):av=av-4
  3d_hide pk:gosub pxz:pk=pk+1:if pk>=130 then pk=33
  3d_position pk,x,7,z:3d_show pk
      gosub music:if tpm2-tpm1>62 then tpm1=tpm2:play 26
end_while
3d_hide 23:3d_hide 24:av=0
' file_load 26,chemin$+"menu.mp3":gosub music:tpm1=tpm2:play 26
' AFFICHAGE DES OPTIONS DU JEU SOUS FORME DE MENU, LE HÉROS TOUJOURS STATIQUE
opt(1)=26:opt(2)=27:opt(3)=29:opt(4)=31 :' for b=1 to 4:3d_show opt(b):next b:b=1
' repeat
'  tch = scancode
'  3d_hide pk:gosub pxz:pk=pk+1:if pk>=130 then pk=33
'  3d_position pk,x,7,z:3d_show pk
'  if tch=27 then gosub fin
'  if tch=37 or tch=39
'    3d_hide opt(b)
'      if even(opt(b))=1
'        opt(b)=opt(b)-1
'      else
'        opt(b)=opt(b)+1
'      end_if
'  end_if
'  if tch=38 then 3d_load_texture opt(b),chemin$+"3d_L3.jpg":b=b-1:if b<1 then b=4
'  if tch=40 then 3d_load_texture opt(b),chemin$+"3d_L3.jpg":b=b+1:if b>4 then b=1
'  if tch=38 or tch=40 then 3d_load_texture opt(b),chemin$+"3d_L2.jpg":3d_show opt(b)
'  if opt(b)>31 then file_load 26,chemin$+"silence.mp3":play 26:m=0
'  if (opt(b)=31 and m=0) then file_load 26,chemin$+"menu.mp3":tpm1=tpm2:play 26:m=26
'  rem gosub music:if tpm2-tpm1>24.1 then tpm1=tpm2:play 26
' until tch=13
' for b=25 to 32:3d_hide b:next b
' LE HÉROS COURT VERS L'ENTRÉE DU LABYRINTHE PENDANT QUE LE PONT-LEVIS,
' LES PORTES ET LA HERSE S'OUVRENT
if m>0 then file_load 26,chemin$+"entrée.mp3":gosub music:tpm1=tpm2:play 26
3d_hide pk:pk=131:3d_show pk
repeat
  3d_move 4,0.5:if av<335 then gosub pxz:z=z+0.5:gosub pospk: ' 3d_hide pk:pk=pk+1:if pk>146 then pk=131
  ' 3d_position pk,x,7,z:3d_show pk
      if av=49 then play 25: ' bruitage ouverture pont levis
      if av>50 and av<140 then 3d_x_rotate 16,av+40: ' MOUVEMENT ouverture DU PONT-LEVIS de l'entrée
      if av>150 and av<235 then 3d_z_rotate 17,prt:3d_z_rotate 18,180-prt:prt=prt-0.5: ' mouvement rotatif ouverture des portes d'entrée
      if av=240 then play 23: ' bruitage de la herse qui se lève
      if av>240 and av<284 then 3d_y_position 15,hrs:hrs=hrs+0.4: ' MOUVEMENT ouverture DE LA HERSE à l'entrée
  gosub affiche:av=av+0.5
  gosub music:if tpm2-tpm1>36.1 then tpm1=tpm2:play 26
until av>=340
3d_hide pk:pk=33:3d_position pk,x,7,z:3d_show pk

' LE HÉROS FAIT 1/2 TOUR
gosub gauche:gosub gauche
3d_hide pk:pk=33:3d_position pk,x,7,z-10:3d_show pk
' FERMETURE DES PONT-LEVIS, PORTES ET HERSE
av=180:play 24: ' bruitage fermeture pont levis
repeat
  3d_x_rotate 16,av:av=av-0.3: ' MOUVEMENT fermeture DU PONT-LEVIS de l'entrée
until av<=90
repeat
  3d_z_rotate 17,prt:3d_z_rotate 18,180-prt:prt=prt+0.5: ' mouvement rotatif fermeture des portes d'entrée
until prt>=360
play 22: ' bruitage de la herse qui se baisse
repeat
  3d_y_position 15,hrs:hrs=hrs-0.4: ' MOUVEMENT fermeture DE LA HERSE à l'entrée
until hrs<=-1
' LE HÉROS REVIENT VERS LA HERSE DE L'ENTRÉE QUI S'EST FERMÉE
av=0:3d_hide pk:pk=131:3d_show pk
repeat
  3d_move 4,0.5:gosub pospk:gosub affiche:av=av+0.5
until av>=20
' LE HÉROS REFAIT 1/2 TOUR
wait 1000:gosub droite:gosub droite
timer_on 4
show 2
return
' ******************************************************************************
' LA SORTIE DU LABYRINTHE
sortie:
timer_off_all
3d_hide pk:pk=33:3d_position pk,x,7,z+5:3d_show pk
prt=0:hrs=-1:av=90
repeat
  3d_z_rotate 19,prt:3d_z_rotate 20,180-prt:prt=prt+0.5: ' mouvement rotatif ouverture des portes de sortie
until prt>=90
repeat
  3d_y_position 22,hrs:hrs=hrs+0.5: ' MOUVEMENT ouverture DE LA HERSE à la sortie
until hrs>=30
repeat
  3d_x_rotate 21,av:av=av-0.5: ' MOUVEMENT ouverture DU PONT-LEVIS de la sortie
until av<=0
delete 27:delete 28:delete 29:delete 30
file_load 26,chemin$+"entrée.mp3":play 26
3d_hide pk:pk=131:3d_show pk
repeat
  3d_move 4,0.5:av=av+0.5:gosub affiche:gosub pospk:wait 40
until av>=80
gosub pxz:av=270
while scancode=0
      3d_hide pk:pk=pk+1:if pk>130 then pk=34
      3d_position pk,x,7,z:3d_show pk:3d_z_rotate pk,wrap_value(av)
      av=av+3:wait 40
end_while
message "BRAVO, VOTRE HÉROS EST SORTI DU LABYRINTHE!":goto quit

' GESTION DU CHAINAGE SUR LE PROGRAMME SUIVANT ICI <-----------
' POUR LA 3ème PARTIE DE L'AVENTURE
' ******************************************************************************
' LA SORTIE DU PROGRAMME
fin:
if message_confirmation_yes_no("Voulez-vous vraiment quitter ?")<>1 then return
quit:
timer_off_all
delete 4
delete 3
delete 2
delete 1
if object_exists(30)=1 then delete 30
if object_exists(29)=1 then delete 29
if object_exists(28)=1 then delete 28
if object_exists(27)=1 then delete 27
delete 26
delete 25
delete 24
delete 23
delete 22
delete 21
delete 20
terminate
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyDim 25 Déc 2011 - 19:14

Bonsoir Jicehel, Smile santa

J'espère que tu passes de bonne fêtes de Noël.
Je viens de rentrer de l'aéroport d'Orly, où je viens d'accompagner ma femme qui décolle pour Bamako pour aller voir sa famille et du coup, je reste seul avec mes deux filles pour 1 mois. Donc j'aurais beaucoup moins de temps pour programmer ce début d'année.
Cet après-midi, j'ai monté le programme Fort Labyrinth sur le 2ème ordi de ma femme, et je me suis apperçu qu'il tournait plus vite que sur le mien. Du coup je vais être obligé de règler à nouveau les paramêtres, mais pour ralentir le programme, pas comme toi pour l'accélérer!
Je crois qu'il est grand temps que tu penses à changer de machine lol! .
Je savais bien que pour ce genre de jeu, la vitesse d'éxécution est différente d'un ordi à l'autre; d'où mon post sur la vitesse des processeurs. Si je pouvais trouver un algorythme de mesure de performance carte mère/processeur, au début de chaque jeu, je peux règler les variables qui font la vitesse d'éxécution du programme. C'est peut-être utopique comme idée, mais je ne vois comment faire autrement pour le moment. A moins que quelqu'un ait une idée géniale. Ou alors Jack qui nous fasse une super instruction dans ce sens. Bon j'arrête là mon délire, et je vous souhaite à tous et à vos familles d'excellentes fêtes de NOËL! flower santa Smile
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyDim 25 Déc 2011 - 22:54

Non serieusement, je pense que ton idée et difficile mais importante, il faudrait que dans les versions de Panoramic orienté 3D ou dans Panoramic même, il y un espèce de timer d'execution d'une procédure, par exemple. Qu'on puise dire par exemple tgosub affiche, 50
=> affiche s'execute en 50ms ou plus si il le fait en moins, on attend que 50ms se soit ecoulé avant de faire le return se qui permettrait d'uniformiser un peu l'execution des programmes indépendamment du processeur (sauf pour les machines les plus lentes qui ramerait toujours car Jack ne peux toujours pas coder de miracle (j'ai toujours dit qu'il était perfectible Smile )
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 26 Déc 2011 - 12:06

Bonjour à tous Very Happy

Pour ceux qui trouvent que le personnage est trop rapide voici comment on peut le ralentir de manière simple:
Code:
' ***    POUR RALENTIR LE PERSONNAGE    ****

' Changer ses deux lignes suivantes
      3d_hide pk:pk=pk+1:if pk>130 then pk=33
      3d_position pk,x,7,z:3d_show pk
' par celles-ci  (on peut mettre pk=pk+0,75 ou 0.5 ou 0.25 pour adapter la vitesse ou une autre valeur de votre choix)
      3d_hide int(pk):pk=pk+0.5:if pk>130 then pk=33
      3d_position int(pk),x,7,z:3d_show int(pk)
' Changer partout où il y a un 3d_hide pk et un 3d_show(pk), n'oubliez pas le 3d_position aussi

' Changer aussi de la même manière dans la procédure pospk
Donc pour l'accélérer, il faudra faire pk=pk+1.5 ou 2 ou +; mais là, attention, toutes les frames du personnage n'apparaîtront pas!

Jicehel, ton idée du tgosub affiche,50 est interressante, mais si on a une partie d'un prog qui doit être éxécutée en 1sec (tgosub affiche,1000) et que le processeur le fait en 500milisecondes, il faut le bloquer 500milisecondes avant de passer à la suite. Non ce qu'il faut à ce moment là, c'est que le processeur sache qu'il faut dérouler l'éxécution en 2 fois plus de temps donc il doit diviser par deux sa vitesse d'éxécution. Ça me parait difficile à programmer pour Jack ce genre de chose.
Bon courage à tous! Wink
Revenir en haut Aller en bas
Invité
Invité




FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 26 Déc 2011 - 17:00

Bonsoir.
Je lis votre post, et je me demandais si vous saviez combien de temps il faudrait que l'image ou je ne sais pas quoi, soit affiché. Pour l'instant je ne télécharge rien, j'ai trop à faire.
Je me disais que si on sait qu'il faille par exemple qu'une image soit affichée disons: 1/2 seconde avant de continuer, il y a une chose très simple à faire. Je pense pouvoir le faire en Autoit, mais qu'une dll simple pourrait aussi convenir.
Il faut tenir compte qu'il n'y a pas que la rapidité du processeur, mais si une tâche d'arrière fond, fonctionne, connaitre la rapidité ne résoud pas tout.
On peut précédé ainsi: mettre un top temps au début d'une procédure, et à la fin de la procédure, si le temps n'est pas à zéro, alors on attend que le compte à rebours soit fini, avant d'arriver au return, ou à l'affichage suivant. Il est évident que cela ne fonctionne que si le processeur est rapide, et non si il est trop lent auquel cas il n'y a pas de solution direct.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 26 Déc 2011 - 22:28

En effet, ça serait un système pour lisser la vitesse d'éxécution et standardiser le source sans avoir à paramètrer la vitesse sur chaque machine
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyMar 27 Déc 2011 - 0:37

Bon j'ai mis Panoramic sur l'ordi de mon beau père et j'ai testé et là, c'est vrai que ça marche très bien (trop, ça aller en effet trop vite comme tu nous l'indiquais)
Pour les fénéants qui ne voudraient pas avoir à modifier le source comme indiqué comme Bignono, je vous mets ici le source pour les machines rapides
Code:
' ******************************************************************************
' ******************************************************************************
' ************************ FORT LABYRINTH version 1.13 *************************
' ********************** CRÉÉ PAR bignono le 25/12/2011 ************************
' **************************** EN BASIC PANORAMIC ******************************
' ******************************************************************************
' ******************************************************************************
' ********************* 2ème partie de mon jeu d'aventure **********************
' ******************************************************************************
' ******************************************************************************
' ******************************************************************************

dim c_espace,tch,tpm1,tpm2,opt(4),c(4)
dim ang,av,b,bs,d,dtn,gd,hrs,h,i,j,k,m,n,pas,pasv,pk,r,s,v,prt,pt,rot,w,x,y,z
dim chemin$,txt1$,txt2$,txt3$,txt4$,txt5$,txt6$,txt7$,titre1$,titre2$,titre3$
label affiche,droite,gauche,herodtn,intro,lab,moteur,music,pan1,pan2,pan4,pan8
label pivot,pospk,pxz,quit,r1,r2,r3,r4,r5,r6,r7,sortie,fin,trace
chemin$ ="C:\Program Files\Panoramic\Sources\fort_labyrinth\"
titre1$="Bignono présente":titre2$="* * * F O R T - L A B Y R I N T H * * *"
titre3$="Programme et musique de Bignono"
txt1$="Patientez, chargement en cours...":txt2$="Construction de la forteresse..."
txt3$="Création du héros...":txt4$="Création du monstre...": ' Création du monstre n°1 n°2 n°3
txt5$="Génération du labyrinthe...":txt6$=" Création des murs dans la salle "
txt7$="Initialisation du programme..."

sound 20:file_load 20,chemin$+"cours1.mp3"
sound 21:file_load 21,chemin$+"cours2.mp3"
sound 22:file_load 22,chemin$+"hersebaisser.mp3"
sound 23:file_load 23,chemin$+"herselever.mp3"
sound 24:file_load 24,chemin$+"pontlevisfermer.mp3"
sound 25:file_load 25,chemin$+"pontlevisbaisser3.mp3"
sound 26:file_load 26,chemin$+"chargement.mp3":play 26
sound 27:file_load 27,chemin$+"mus1.mp3"
sound 28:file_load 28,chemin$+"mus2.mp3"
sound 29:file_load 29,chemin$+"mus3.mp3"
sound 30:file_load 30,chemin$+"mus4.mp3"

' ******************************************************************************
' ************************ INITIALISATION DES VARIABLES ************************
' ******************************************************************************
' ************ h et v représentent les dimensions du labyrinthe ****************
' ****** pas : sert à règler la vitesse de déplacement dans le labyrinthe ******
' ****** pasv: sert à règler la vitesse du zoom vertical ***********************
h=21:v=20:n=h*v-1:h=h+1:v=v+1:d=1:w=13:pas=0.25:pasv=5:c_espace=0
dim a(h+1,v+1),mur(h+1,v+1),trc(h,v)
gosub lab

label dbug
DIM debug : debug =0
IF Debug =1
    FORM 500 : WIDTH 500, 150 : HEIGHT 500, 200 : TOP 500, 3 : LEFT 500, 3
    ALPHA 501 : PARENT 501, 500 : HEIGHT 501, 15 : TOP 501, 3 : LEFT 501, 3
    ALPHA 502 : PARENT 502, 500 : HEIGHT 502, 15 : TOP 502, 20 : LEFT 502, 3
    ALPHA 503 : PARENT 503, 500 : HEIGHT 503, 15 : TOP 503, 37 : LEFT 503, 3
    ALPHA 504 : PARENT 504, 500 : HEIGHT 504, 15 : TOP 504, 54 : LEFT 504, 3
    ALPHA 505 : PARENT 505, 500 : HEIGHT 505, 15 : TOP 505, 71 : LEFT 505, 3
    ALPHA 506 : PARENT 506, 500 : HEIGHT 506, 15 : TOP 506, 88 : LEFT 506, 3
    ALPHA 507 : PARENT 507, 500 : HEIGHT 507, 15 : TOP 507, 105 : LEFT 507, 3
    ALPHA 508 : PARENT 508, 500 : HEIGHT 508, 15 : TOP 508, 122 : LEFT 508, 3
    ALPHA 509 : PARENT 509, 500 : HEIGHT 509, 15 : TOP 509, 139 : LEFT 509, 3
END_IF

full_space 0:color 0,0,0,0:' border_hide 0

font_name 0,"Times New Roman":font_size 0,50:font_bold 0:font_color 0,255,0,0
print_locate screen_x/2-(text_width(titre1$,0)/2),screen_y/2-12*(text_height(titre1$,0)/2):print titre1$:wait 1000
print_locate screen_x/2-(text_width(titre2$,0)/2),screen_y/2-10*(text_height(titre2$,0)/2):print titre2$:wait 1000
print_locate screen_x/2-(text_width(titre3$,0)/2),screen_y/2-8*(text_height(titre3$,0)/2):print titre3$:wait 1000
print_locate screen_x/2-(text_width(txt1$,0)/2),screen_y/2-5*(text_height(txt1$,0)/2):print txt1$:wait 1000

scene3d 1:3d_target_is 1:hide 1:full_space 1:light_position 0,1500,0:3d_skybox 1
3d_load_texture_right 1,chemin$+"sk1.bmp"
3d_load_texture_back 1,chemin$+"sk2.bmp"
3d_load_texture_top 1,chemin$+"sk3.bmp"
3d_load_texture_left 1,chemin$+"sk4.bmp"
3d_load_texture_front 1,chemin$+"sk5.bmp"
3d_load_texture_bottom 1,chemin$+"sk6.bmp"
3d_plane 2:3d_scale 2,1000,1000,1:3d_x_rotate 2,90:3d_y_position 2,-0.25
3d_load_texture 2,chemin$+"herbe.JPG":3d_u_tile 2,400:3d_v_tile 2,400
3d_plane 3:3d_scale 3,42,40,1:3d_x_rotate 3,90:3d_position 3,240,0,230
3d_load_texture 3,chemin$+"terre.jpg":3d_u_tile 3,10:3d_v_tile 3,10

3d_cube 4,1:3d_hide 4:3d_mesh 5:3d_hide 5: ' CRÉATION DES VÉHICULES MOTEUR ET CAMÉRA
gosub dbug
' ******************************************************************************
' ****************      CONSTRUCTION DE LA FORTERESSE  ************************
' ******************************************************************************
print_locate screen_x/2-(text_width(txt2$,0)/2),screen_y/2-3*(text_height(txt2$,0)/2):print txt2$
' LES 8 TOURS
3d_mesh 6:3d_load_object 6,chemin$+"tr.3ds":3d_load_texture 6,chemin$+"tr.jpg"
3d_position 6,240,0,230:3d_scale 6,42,44,32:3d_x_rotate 6,90:3d_z_rotate 6,180
3d_mesh 7:3d_load_object 7,chemin$+"gués.3ds":3d_load_texture 7,chemin$+"gués.bmp"
3d_position 7,240,0,230:3d_scale 7,42,44,32:3d_x_rotate 7,90:3d_z_rotate 7,180
' les remparts latéraux à l'entrée
3d_box 8,42,72,20:3d_position 8,200,36,-33:3d_y_rotate 8,90:3d_load_texture 8,chemin$+"m1r.jpg"
3d_box 9,42,72,20:3d_position 9,288,36,-33:3d_y_rotate 9,90:3d_load_texture 9,chemin$+"m1r.jpg"
' les blocs remparts aux entrées et à la sortie
3d_box 10,22,72,20:3d_position 10,220,36,-80:3d_load_texture 10,chemin$+"m8r.jpg": ' rempart latéral pont levis et portes entrée
3d_box 11,22,72,20:3d_position 11,260,36,-80:3d_load_texture 11,chemin$+"m8r.jpg": ' rempart latéral pont levis et portes entrée
3d_box 12,21,24,20:3d_position 12,240,60,-80:3d_load_texture 12,chemin$+"m8.jpg": ' bloc au-dessus pont levis et portes entrée
3d_box 13,21,24,20:3d_position 13,240,60,20:3d_load_texture 13,chemin$+"m8.jpg" : ' bloc au-dessus herse
3d_box 14,21,24,20:3d_position 14,240,60,440:3d_load_texture 14,chemin$+"m8.jpg": ' bloc au-dessus portes sortie
' LA HERSE A L'ENTRÉE
3d_mesh 15:3d_position 15,240,-1,13:3d_x_rotate 15,90:3d_scale 15,1,1,1.15
3d_load_object 15,chemin$+"herse.3ds":3d_load_texture 15,chemin$+"herse.bmp"
' LE PONT-LEVIS A L'ENTRÉE
3d_mesh 16:3d_position 16,240,0,-90:3d_x_rotate 16,90:3d_scale 16,1,1,1.1
3d_load_object 16,chemin$+"pntlvs.3ds":3d_load_texture 16,chemin$+"pntlvs.jpg"
' LES PORTES D'ENTRÉE
3d_mesh 17:3d_position 17,227,0,-70:3d_x_rotate 17,90:3d_scale 17,1,1,1.1
3d_load_object 17,chemin$+"porte.3ds":3d_load_texture 17,chemin$+"porte.jpg"
3d_mesh 18:3d_position 18,252,0,-70:3d_x_rotate 18,90:3d_z_rotate 18,180:3d_scale 18,1,1,1.1
3d_load_object 18,chemin$+"porte.3ds":3d_load_texture 18,chemin$+"porte.jpg"
' LES PORTES DE SORTIE
3d_mesh 19:3d_position 19,230,0,442:3d_x_rotate 19,90:3d_scale 19,0.78,0.75,1.1
3d_load_object 19,chemin$+"porte.3ds":3d_load_texture 19,chemin$+"porte.jpg"
3d_mesh 20:3d_position 20,249,0,442:3d_x_rotate 20,90:3d_z_rotate 20,180:3d_scale 20,0.78,0.75,1.1
3d_load_object 20,chemin$+"porte.3ds":3d_load_texture 20,chemin$+"porte.jpg"
' LE PONT-LEVIS A LA SORTIE
3d_mesh 21:3d_position 21,240,0,450:3d_x_rotate 21,90:3d_scale 21,1,1,1.1
3d_load_object 21,chemin$+"pntlvs.3ds": 3d_load_texture 21,chemin$+"pntlvs.jpg"
' LA HERSE A LA SORTIE
3d_mesh 22:3d_position 22,240,-1,446:3d_x_rotate 22,90:3d_scale 22,1,1,1.15
3d_load_object 22,chemin$+"herse.3ds": 3d_load_texture 22,chemin$+"herse.bmp"
' TEXTE 3D LABYRINTH
 3d_mesh 23:3d_load_object 23,chemin$+"Labyrinth.3ds":3d_load_texture 23,chemin$+"3d_L1.jpg"
3d_position 23,240,30,-250:3d_x_rotate 23,90:3d_scale 23,30,30,30:3d_z_rotate 23,180:3d_hide 23
' TEXTE 3D FORT
3d_mesh 24:3d_load_object 24,chemin$+"Fort.3ds":3d_load_texture 24,chemin$+"3d_L1.jpg"
3d_position 24,240,30,-250:3d_x_rotate 24,90:3d_scale 24,30,30,30:3d_z_rotate 24,180:3d_hide 24
' LE MENU OPTION EN LETTRES 3D AVEC TEXTURES
3d_mesh 25:3d_load_object 25,chemin$+"opt1_oui.3ds":3d_position 25,240,60,-225
3d_mesh 26:3d_load_object 26,chemin$+"opt1_non.3ds":3d_position 26,240,60,-225
3d_mesh 27:3d_load_object 27,chemin$+"opt2_oui.3ds":3d_position 27,240,50,-225
3d_mesh 28:3d_load_object 28,chemin$+"opt2_non.3ds":3d_position 28,240,50,-225
3d_mesh 29:3d_load_object 29,chemin$+"opt3_oui.3ds":3d_position 29,240,40,-225
3d_mesh 30:3d_load_object 30,chemin$+"opt3_non.3ds":3d_position 30,240,40,-225
3d_mesh 31:3d_load_object 31,chemin$+"opt4_oui.3ds":3d_position 31,240,30,-225
3d_mesh 32:3d_load_object 32,chemin$+"opt4_non.3ds":3d_position 32,240,30,-225
for b=25 to 32:3d_load_texture b,chemin$+"3d_L3.jpg":3d_x_rotate b,90
3d_scale b,5,5,5:3d_z_rotate b,180:3d_hide b:next b

print_locate screen_x/2-(text_width(txt3$,0)/2),screen_y/2-1*(text_height(txt3$,0)/2):print txt3$
' CRÉATION DU HÉROS
3d_mesh 33:3d_load_object 33,chemin$+"pk001.3ds"
3d_mesh 34:3d_load_object 34,chemin$+"pk002.3ds"
3d_mesh 35:3d_load_object 35,chemin$+"pk003.3ds"
3d_mesh 36:3d_load_object 36,chemin$+"pk004.3ds"
3d_mesh 37:3d_load_object 37,chemin$+"pk005.3ds"
3d_mesh 38:3d_load_object 38,chemin$+"pk006.3ds"
3d_mesh 39:3d_load_object 39,chemin$+"pk007.3ds"
3d_mesh 40:3d_load_object 40,chemin$+"pk008.3ds"
3d_mesh 41:3d_load_object 41,chemin$+"pk009.3ds"
3d_mesh 42:3d_load_object 42,chemin$+"pk010.3ds"
3d_mesh 43:3d_load_object 43,chemin$+"pk011.3ds"
3d_mesh 44:3d_load_object 44,chemin$+"pk012.3ds"
3d_mesh 45:3d_load_object 45,chemin$+"pk013.3ds"
3d_mesh 46:3d_load_object 46,chemin$+"pk014.3ds"
3d_mesh 47:3d_load_object 47,chemin$+"pk015.3ds"
3d_mesh 48:3d_load_object 48,chemin$+"pk016.3ds"
3d_mesh 49:3d_load_object 49,chemin$+"pk017.3ds"
3d_mesh 50:3d_load_object 50,chemin$+"pk018.3ds"
3d_mesh 51:3d_load_object 51,chemin$+"pk019.3ds"
3d_mesh 52:3d_load_object 52,chemin$+"pk020.3ds"
3d_mesh 53:3d_load_object 53,chemin$+"pk021.3ds"
3d_mesh 54:3d_load_object 54,chemin$+"pk022.3ds"
3d_mesh 55:3d_load_object 55,chemin$+"pk023.3ds"
3d_mesh 56:3d_load_object 56,chemin$+"pk024.3ds"
3d_mesh 57:3d_load_object 57,chemin$+"pk025.3ds"
3d_mesh 58:3d_load_object 58,chemin$+"pk026.3ds"
3d_mesh 59:3d_load_object 59,chemin$+"pk027.3ds"
3d_mesh 60:3d_load_object 60,chemin$+"pk028.3ds"
3d_mesh 61:3d_load_object 61,chemin$+"pk029.3ds"
3d_mesh 62:3d_load_object 62,chemin$+"pk030.3ds"
3d_mesh 63:3d_load_object 63,chemin$+"pk031.3ds"
3d_mesh 64:3d_load_object 64,chemin$+"pk032.3ds"
3d_mesh 65:3d_load_object 65,chemin$+"pk033.3ds"
3d_mesh 66:3d_load_object 66,chemin$+"pk034.3ds"
3d_mesh 67:3d_load_object 67,chemin$+"pk035.3ds"
3d_mesh 68:3d_load_object 68,chemin$+"pk036.3ds"
3d_mesh 69:3d_load_object 69,chemin$+"pk037.3ds"
3d_mesh 70:3d_load_object 70,chemin$+"pk038.3ds"
3d_mesh 71:3d_load_object 71,chemin$+"pk039.3ds"
3d_mesh 72:3d_load_object 72,chemin$+"pk040.3ds"
3d_mesh 73:3d_load_object 73,chemin$+"pk041.3ds"
3d_mesh 74:3d_load_object 74,chemin$+"pk042.3ds"
3d_mesh 75:3d_load_object 75,chemin$+"pk043.3ds"
3d_mesh 76:3d_load_object 76,chemin$+"pk044.3ds"
3d_mesh 77:3d_load_object 77,chemin$+"pk045.3ds"
3d_mesh 78:3d_load_object 78,chemin$+"pk046.3ds"
3d_mesh 79:3d_load_object 79,chemin$+"pk047.3ds"
3d_mesh 80:3d_load_object 80,chemin$+"pk048.3ds"
3d_mesh 81:3d_load_object 81,chemin$+"pk049.3ds"
3d_mesh 82:3d_load_object 82,chemin$+"pk050.3ds"
3d_mesh 83:3d_load_object 83,chemin$+"pk051.3ds"
3d_mesh 84:3d_load_object 84,chemin$+"pk052.3ds"
3d_mesh 85:3d_load_object 85,chemin$+"pk053.3ds"
3d_mesh 86:3d_load_object 86,chemin$+"pk054.3ds"
3d_mesh 87:3d_load_object 87,chemin$+"pk055.3ds"
3d_mesh 88:3d_load_object 88,chemin$+"pk056.3ds"
3d_mesh 89:3d_load_object 89,chemin$+"pk057.3ds"
3d_mesh 90:3d_load_object 90,chemin$+"pk058.3ds"
3d_mesh 91:3d_load_object 91,chemin$+"pk059.3ds"
3d_mesh 92:3d_load_object 92,chemin$+"pk060.3ds"
3d_mesh 93:3d_load_object 93,chemin$+"pk061.3ds"
3d_mesh 94:3d_load_object 94,chemin$+"pk062.3ds"
3d_mesh 95:3d_load_object 95,chemin$+"pk063.3ds"
3d_mesh 96:3d_load_object 96,chemin$+"pk064.3ds"
3d_mesh 97:3d_load_object 97,chemin$+"pk065.3ds"
3d_mesh 98:3d_load_object 98,chemin$+"pk066.3ds"
3d_mesh 99:3d_load_object 99,chemin$+"pk067.3ds"
3d_mesh 100:3d_load_object 100,chemin$+"pk068.3ds"
3d_mesh 101:3d_load_object 101,chemin$+"pk069.3ds"
3d_mesh 102:3d_load_object 102,chemin$+"pk070.3ds"
3d_mesh 103:3d_load_object 103,chemin$+"pk071.3ds"
3d_mesh 104:3d_load_object 104,chemin$+"pk072.3ds"
3d_mesh 105:3d_load_object 105,chemin$+"pk073.3ds"
3d_mesh 106:3d_load_object 106,chemin$+"pk074.3ds"
3d_mesh 107:3d_load_object 107,chemin$+"pk075.3ds"
3d_mesh 108:3d_load_object 108,chemin$+"pk076.3ds"
3d_mesh 109:3d_load_object 109,chemin$+"pk077.3ds"
3d_mesh 110:3d_load_object 110,chemin$+"pk078.3ds"
3d_mesh 111:3d_load_object 111,chemin$+"pk079.3ds"
3d_mesh 112:3d_load_object 112,chemin$+"pk080.3ds"
3d_mesh 113:3d_load_object 113,chemin$+"pk081.3ds"
3d_mesh 114:3d_load_object 114,chemin$+"pk082.3ds"
3d_mesh 115:3d_load_object 115,chemin$+"pk083.3ds"
3d_mesh 116:3d_load_object 116,chemin$+"pk084.3ds"
3d_mesh 117:3d_load_object 117,chemin$+"pk085.3ds"
3d_mesh 118:3d_load_object 118,chemin$+"pk086.3ds"
3d_mesh 119:3d_load_object 119,chemin$+"pk087.3ds"
3d_mesh 120:3d_load_object 120,chemin$+"pk088.3ds"
3d_mesh 121:3d_load_object 121,chemin$+"pk089.3ds"
3d_mesh 122:3d_load_object 122,chemin$+"pk090.3ds"
3d_mesh 123:3d_load_object 123,chemin$+"pk091.3ds"
3d_mesh 124:3d_load_object 124,chemin$+"pk092.3ds"
3d_mesh 125:3d_load_object 125,chemin$+"pk093.3ds"
3d_mesh 126:3d_load_object 126,chemin$+"pk094.3ds"
3d_mesh 127:3d_load_object 127,chemin$+"pk095.3ds"
3d_mesh 128:3d_load_object 128,chemin$+"pk096.3ds"
3d_mesh 129:3d_load_object 129,chemin$+"pk097.3ds"
3d_mesh 130:3d_load_object 130,chemin$+"pk098.3ds"
3d_mesh 131:3d_load_object 131,chemin$+"pk099.3ds"
3d_mesh 132:3d_load_object 132,chemin$+"pk100.3ds"
3d_mesh 133:3d_load_object 133,chemin$+"pk101.3ds"
3d_mesh 134:3d_load_object 134,chemin$+"pk102.3ds"
3d_mesh 135:3d_load_object 135,chemin$+"pk103.3ds"
3d_mesh 136:3d_load_object 136,chemin$+"pk104.3ds"
3d_mesh 137:3d_load_object 137,chemin$+"pk105.3ds"
3d_mesh 138:3d_load_object 138,chemin$+"pk106.3ds"
3d_mesh 139:3d_load_object 139,chemin$+"pk107.3ds"
3d_mesh 140:3d_load_object 140,chemin$+"pk108.3ds"
3d_mesh 141:3d_load_object 141,chemin$+"pk109.3ds"
3d_mesh 142:3d_load_object 142,chemin$+"pk110.3ds"
3d_mesh 143:3d_load_object 143,chemin$+"pk111.3ds"
3d_mesh 144:3d_load_object 144,chemin$+"pk112.3ds"
3d_mesh 145:3d_load_object 145,chemin$+"pk113.3ds"
3d_mesh 146:3d_load_object 146,chemin$+"pk114.3ds"
pk=32
repeat
  pk=pk+1:3d_load_texture pk,chemin$+"pk.bmp":3d_scale pk,0.25,0.25,0.25
  3d_x_rotate pk,90:3d_z_rotate pk,270:3d_hide pk:3d_position pk,240,7,-290
until pk>=146:pk=33

' GARGOYLES
3d_mesh 147:3d_load_object 147,chemin$+"gargoyle.3ds"
3d_scale 147,0.75,0.75,0.75:3d_x_rotate 147,90:3d_y_rotate 147,30
3d_position 147,232,18,20:3d_color 147,0,50,40
3d_mesh 148:3d_load_object 148,chemin$+"gargoyle.3ds"
3d_scale 148,0.75,0.75,0.75
3d_x_rotate 148,90:3d_y_rotate 148,330:3d_z_rotate 148,180
3d_position 148,248,18,20:3d_color 148,0,50,40
' DRAGONS
3d_box 149,20,5,40:3d_position 149,220,0,-30:3d_load_texture 149,chemin$+"3d_L4.jpg": ' piedestal marbre droit
3d_box 150,20,5,40:3d_position 150,268,0,-30:3d_load_texture 150,chemin$+"3d_L4.jpg": ' piedestal marbre gauche
' dragon 1 droit
3d_mesh 151:3d_load_object 151,chemin$+"dragdroit.3ds":3d_color 151,0,25,15
3d_scale 151,40,40,40:3d_y_rotate 151,150
3d_x_rotate 151,90:3d_position 151,218,2,-30
' dragon 2 gauche
3d_mesh 152:3d_load_object 152,chemin$+"dragauche.3ds":3d_color 152,0,25,15
3d_scale 152,40,40,40:3d_y_rotate 152,210
3d_x_rotate 152,90:3d_position 152,272,2,-30

' ******************************************************************************
' ****************      CONSTRUCTION DU LABYRINTHE      ************************
' ******************************************************************************
' 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
print_locate screen_x/2-(text_width(txt5$,0)/2),screen_y/2+3*(text_height(txt5$,0)/2):print txt5$
for i=1 to h:a(i,1)=8:next i:for j=1 to v:a(1,j)=1:next j
for j=2 to v
  for i=2 to h: trc(i,j)=0
if (i=(int(h/2)+1) and j=2) then a(i,j)=a(i,j)-8
if (i=(int(h/2)+1) and j=v) then a(i,j)=a(i,j)-2
  txt6$=left$(txt6$,33)+str$(i*j)+"..."
  print_locate screen_x/2-(text_width(txt6$,0)/2),screen_y/2+5*(text_height(txt6$,0)/2):print txt6$

    select a(i,j)
      case 1
        gosub pan1
      case 2
        gosub pan2
      case 3
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan2
      case 4
        gosub pan4
      case 5
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan4
      case 6
        gosub pan2:gosub pan4
      case 7
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan2:gosub pan4
      case 8
        gosub pan8
      case 9
        if a(i-1,j)<4 or a(i-1,j)>7 and a(i-1,j)<12 then gosub pan1
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 10
        gosub pan2
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 11
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan2
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 12
        gosub pan4
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 13
        if a(i-1,j)<4 or (a(i-1,j)>7 and a(i-1,j)<12) then gosub pan1
        gosub pan4
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
      case 14
        gosub pan2:gosub pan4
        if a(i,j-1)=1 or a(i,j-1)=4 or a(i,j-1)=5 or a(i,j-1)=8 or a(i,j-1)=9 or a(i,j-1)=12 or a(i,j-1)=13 then gosub pan8
    end_select
  next i
next j

gosub dbug
print_locate screen_x/2-text_width(txt7$,0)/2,screen_y/2+7*text_height(txt7$,0)/2:print txt7$

' ******************************************************************************
' ******************      CRÉATION DE LA BOUSSOLE      ************************
' ******************************************************************************
scene3d 2:3d_target_is 2:hide 2:width 2,160:height 2,160
left 2,screen_x-180:top 2,screen_y-240:color 2,0,0,0
3d_cylinder number_3d_objects+1,0.25,1,1
3d_load_texture number_3d_objects,chemin$+"étui.jpg"
3d_x_rotate number_3d_objects,90
3d_cylinder number_3d_objects+1,0.26,0.9,0.9
3d_load_texture number_3d_objects,chemin$+"cadran.jpg"
3d_x_rotate number_3d_objects,270
3d_mesh number_3d_objects+1
3d_load_object number_3d_objects,chemin$+"aiguille.3ds"
3d_load_texture number_3d_objects,chemin$+"aiguille.bmp"
3d_x_rotate number_3d_objects,270:3d_y_rotate number_3d_objects,180
bs=number_3d_objects
3d_target_is 1

' ******************************************************************************
' ** Initialisation position départ et création d'1 timer pour l'intro du jeu **
' ** Création d'1 second timer pour gèrer les déplacements dans le labyrinthe **
' ******************************************************************************
i=int(h/2)+1:j=1:dtn=1

' ! INFO: en dessous de 17 le timer_interval 3 est inopérant & le prog ralenti !
timer 3:timer_interval 3,200:on_timer 3,intro
timer 4:timer_interval 4,50:on_timer 4,moteur
show 1
end

' ******************************************************************************
' *****************    LE PROGRAMME PRINCIPAL    ******************************
' ******************************************************************************
moteur:

timer_off 4

gosub dbug

if m<>0
  gosub music
  if tpm2-tpm1>60 then tpm1=tpm2:m=m+1:play m:if m>29 then m=26
end_if

if c_espace=1 and opt(2)=27 then gosub trace
timer_on 4:tch=scancode:timer_off 4
select tch
  case 0: ' LE HÉROS EN MOUVEMENT RESTE EN POSITION STATIQUE
      3d_hide int(pk):pk=pk+0.25:if pk>130 then pk=33
      3d_position int(pk),x,7,z:3d_show int(pk)
  case 27:gosub fin:  ' SORTIE PROGRAMME
  case 32:c_espace=1: ' AFFICHAGE DU PLAN DU LABYRINTHE
  case 37:gosub gauche: ' FLECHE GAUCHE = ROTATION A GAUCHE
  case 39:gosub droite: ' FLECHE DROITE = ROTATION A DROITE
  case 38:  ' FLECHE HAUT = DTN DEFINIT LA DIRECTION NORD, OUEST, SUD OU EST
  3d_hide int(pk):pk=131:3d_show pk
  select dtn
    case 1
    if j < v+1
        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*20:j=j+1:gd=j*20
              repeat
                pt=pt+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until pt>=gd
        end_if
    end_if
    case 2
    if i < h  and j > 1
        if a(i,j)<4 or a(i,j)>7 and a(i,j)<12
          pt=i*20:i=i+1:gd=i*20
              repeat
                pt=pt+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until pt>=gd
        end_if
    end_if
    case 3
    if j > 2
        if a(i,j)<8
            pt=j*20:j=j-1:gd=j*20
              repeat
                gd=gd+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until gd>=pt
        end_if
    end_if
    case 4
    if i > 2 and j > 1
        if odd(a(i,j))=0
            pt=i*20:i=i-1:gd=i*20
              repeat
                gd=gd+pas:3d_move 4,pas:gosub pospk:gosub affiche
              until gd>=pt
        end_if
    end_if
  end_select
end_select

' MÉMORISATION DE SON PASSAGE PAR DES SPHÈRES ORANGES ==> OPTION PETIT POUCET
if opt(1)=25
  if trc(i,j)=0 and j>1
    3d_sphere number_3d_objects+1,2
    3d_position number_3d_objects,i*20,1,j*20
    3d_color number_3d_objects,224,128,32
    trc(i,j)=number_3d_objects
  end_if
end_if

' ROTATION DU HÉROS DANS LE SENS DU DÉPLACEMENT
 gosub herodtn

' TEST DE SORTIE DU LABYRINTHE
if j=v and i=(int(h/2)+1) and dtn=1 then goto sortie

timer_on 4

return

' ******************************************************************************
' *********************    LES ROUTINES      ***********************************
' ******************************************************************************

' CALCUL DES POSITIONS DES VÉHICULES MOTEUR ET CAMÉRA
affiche:
3d_position 5,o3d_x_position(4),o3d_y_position(4),o3d_z_position(4):3d_rotate 5,o3d_x_rotate(4),o3d_y_rotate(4),o3d_z_rotate(4)
3d_move 5,1:cam_position o3d_x_position(4),w,o3d_z_position(4):point_position o3d_x_position(5),13,o3d_z_position(5)
return

' CRÉATION DES MURS DU LABYRINTHE
pan1:
if i=2
  3d_box number_3d_objects+1,22,72,20:3d_position number_3d_objects,(i*20)-20,36,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20)-10,10,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1.jpg"
end_if
return
pan2:
if j=v
  3d_box number_3d_objects+1,20.9,72,20:3d_position number_3d_objects,(i*20),36,(j*20)+20:3d_load_texture number_3d_objects,chemin$+"m8r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20),10,(j*20)+10:3d_load_texture number_3d_objects,chemin$+"m8.jpg"
end_if
return
pan4:
if i=h
  3d_box number_3d_objects+1,22,72,20:3d_position number_3d_objects,(i*20)+20,36,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20)+10,10,(j*20):3d_y_rotate number_3d_objects,90:3d_load_texture number_3d_objects,chemin$+"m1.jpg"
end_if
return
pan8:
if j=2
  3d_box number_3d_objects+1,20.9,72,20:3d_position number_3d_objects,(i*20),36,(j*20)-20:3d_load_texture number_3d_objects,chemin$+"m8r.jpg"
else
  3d_box number_3d_objects+1,20.9,20,2:3d_position number_3d_objects,(i*20),10,(j*20)-10:3d_load_texture number_3d_objects,chemin$+"m8.jpg"
end_if
return

' VISION SATELLITE DU LABYRINTHE EN 3D
trace:
  repeat
      w=w+pasv:cam_position o3d_x_position(4),w,o3d_z_position(4):display
  until w>=600

repeat
  if scancode=27 then gosub fin
  if scancode=37 then gosub gauche
  if scancode=39 then gosub droite
until scancode=32

repeat
  w=w-pasv:cam_position o3d_x_position(4),w,o3d_z_position(4):display
until w<=13
c_espace=0
return

' ROTATION A GAUCHE
gauche:
ang=rot+90:dtn=dtn+1:if dtn>4 then dtn=1
    repeat
        rot=rot+6*pas:3d_y_rotate 4,rot:3d_y_rotate bs,rot+180
        if w>13 then gosub pivot
        gosub affiche
    until rot>=ang
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 4,rot:3d_y_rotate bs,rot+180
        if w>13 then gosub pivot
        gosub affiche
    until rot<=ang
return

' ROTATION DE LA CAMÉRA LORS DE LA VISION SATELLITE
pivot:
cam_position o3d_x_position(4),o3d_y_position(4)+w,o3d_z_position(4)
return
' ROUTINES DE RECHERCHE DES POSITIONS X ET Z DU HÉROS
pospk:
3d_hide int(pk):pk=pk+0.25:if pk>146 then pk=131
if int(pk)=138 then play 20
if int(pk)=146 then play 21
gosub herodtn
3d_position int(pk),x,7,z:3d_show int(pk)
return

herodtn:
  if dtn=1 then x=o3d_x_position(4):z=o3d_z_position(4)+5:3d_z_rotate int(pk),270
  if dtn=2 then x=o3d_x_position(4)+5:z=o3d_z_position(4):3d_z_rotate int(pk),0
  if dtn=3 then x=o3d_x_position(4):z=o3d_z_position(4)-5:3d_z_rotate int(pk),90
  if dtn=4 then x=o3d_x_position(4)-5:z=o3d_z_position(4):3d_z_rotate int(pk),180
return

pxz:
x=o3d_x_position(int(pk)):z=o3d_z_position(int(pk))
return

' GÉNÉRATION DU LABYRINTHE
lab:
for j=1 to v+1:a(1,j)=4:a(h+1,j)=1:next j
for i=2 to h:a(i,v+1)=8:a(i,1)=2:for j=2 to v:a(i,j)=15:next j:next i
r=int(h/2+1):s=int(v/2+1):a(r,s)=15
for k=1 to n
r1:
  i=0
  if a(r-1,s)=15 then i=i+1 :c(i)=1
  if a(r,s-1)=15 then i=i+1 :c(i)=2
  if a(r+1,s)=15 then i=i+1 :c(i)=3
  if a(r,s+1)=15 then i=i+1 :c(i)=4
  if i=0 then goto r2
  if i<>1 then i=int(rnd(i)+1)
  select c(i)
      case 1 :a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2):r=r-1:a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4
      case 2 :a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8:s=s-1:a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2
      case 3 :a(r,s)=a(r,s)-(int(a(r,s)/4)-int(int(a(r,s)/4)/2)*2)*4:r=r+1:a(r,s)=a(r,s)-(int(a(r,s))-int(int(a(r,s))/2)*2)
      case 4 :a(r,s)=a(r,s)-(int(a(r,s)/2)-int(int(a(r,s)/2)/2)*2)*2:s=s+1:a(r,s)=a(r,s)-(int(a(r,s)/8)-int(int(a(r,s)/8)/2)*2)*8
  end_select
  goto r7
r2:
  if d=-1 then goto r3
  if r<>h then goto r5
  if s<>v then goto r4
  r=2:s=2:goto r6
r3:
  if r<>2 then goto r5
  if s<>v then goto r4
  r=h:s=2: goto r6
r4:
  s=s+1:d=-1*d:goto r6
r5:
  r=r+d
r6:
  if a(r,s)=15 then goto r2
  goto r1
r7:
  mur(r,s)=int(rnd(6)+1)
  if mur(r,s)=mur(r-1,s) or mur(r,s)=mur(r+1,s) or mur(r,s)=mur(r,s-1) or mur(r,s)=mur(r,s+1) then goto r7
next k
return

' GESTION DE LA MUSIQUE
music:
tpm2=(val(left$(time$,2))*3600)+(val(mid$(time$,4,2))*60)+val(right$(time$,2))
return

' ******************************************************************************
' ******************************************************************************
' ******************* routine de DEBUGAGE **************************************
' ******************************************************************************
' ******************************************************************************
dbug:
    IF debug =1
        CAPTION 501, "number_3d_objects=" + STR$(number_3d_objects)
        CAPTION 502, "pk=" + STR$(int(pk))
        CAPTION 503, "number_objects=" + STR$(number_objects)
'        caption 504, "z=" + str$(z)
        caption 505, "dtn=" + str$(dtn)
        caption 506, "a(i,j)=" + str$(a(i,j))
        caption 507, "a(i,v)=" + str$(a(i,v))
        caption 508, "i=" + str$(i)
        caption 509, "j=" + str$(j)
    END_IF
return

' ******************************************************************************
' DÉBUT DU JEU --> NOM DU JEU, RÈGLAGE OPTIONS & ENTRÉE DANS LABYRINTHE
' ******************************************************************************
intro:
timer_off_all
av=180:hrs=-1:prt=360:pk=33:m=26
3d_position 4,((h/2)*20)-(3*odd(h))+20,15,-300:3d_show 23:3d_show 24:3d_show 33
gosub affiche
file_load 26,chemin$+"FORT LABYRINTH.mp3":gosub music:tpm1=tpm2:play 26
' LE NOM DU JEU EN PIERRE TOURNOIE ET LE HÉROS EN MOUVEMENT RESTE STATIQUE
while scancode=0
  3d_z_rotate 23,av:3d_z_rotate 24,abs(av):av=av-4
  3d_hide int(pk):gosub pxz:pk=pk+0.25:if pk>=130 then pk=33
  3d_position int(pk),x,7,z:3d_show int(pk)
      gosub music:if tpm2-tpm1>62 then tpm1=tpm2:play 26
end_while
3d_hide 23:3d_hide 24:av=0
file_load 26,chemin$+"menu.mp3":gosub music:tpm1=tpm2:play 26
' AFFICHAGE DES OPTIONS DU JEU SOUS FORME DE MENU, LE HÉROS TOUJOURS STATIQUE
opt(1)=25:opt(2)=27:opt(3)=30:opt(4)=31:for b=1 to 4:3d_show opt(b):next b:b=1
repeat
    3d_hide int(pk):gosub pxz:pk=pk+0.25:if pk>=130 then pk=33
    3d_position int(pk),x,7,z:3d_show int(pk)
  if scancode=27 then gosub fin
  if scancode=37 or scancode=39
    3d_hide opt(b)
      if even(opt(b))=1
        opt(b)=opt(b)-1
      else
        opt(b)=opt(b)+1
      end_if
  end_if
  if scancode=38 then 3d_load_texture opt(b),chemin$+"3d_L3.jpg":b=b-1:if b<1 then b=4
  if scancode=40 then 3d_load_texture opt(b),chemin$+"3d_L3.jpg":b=b+1:if b>4 then b=1
  3d_load_texture opt(b),chemin$+"3d_L2.jpg":3d_show opt(b)
  if opt(b)>31 then file_load 26,chemin$+"silence.mp3":play 26:m=0
  if (opt(b)=31 and m=0) then file_load 26,chemin$+"menu.mp3":tpm1=tpm2:play 26:m=26
  gosub music:if tpm2-tpm1>24.1 then tpm1=tpm2:play 26
until scancode=13
for b=25 to 32:3d_hide b:next b
' LE HÉROS COURT VERS L'ENTRÉE DU LABYRINTHE PENDANT QUE LE PONT-LEVIS,
' LES PORTES ET LA HERSE S'OUVRENT
if m>0 then file_load 26,chemin$+"entrée.mp3":gosub music:tpm1=tpm2:play 26
3d_hide int(pk):pk=131:3d_show pk
repeat
  3d_move 4,0.5:if av<335 then gosub pxz:z=z+0.5:gosub pospk: ' 3d_hide pk:pk=pk+1:if pk>146 then pk=131
  ' 3d_position pk,x,7,z:3d_show pk
      if av=49 then play 25: ' bruitage ouverture pont levis
      if av>50 and av<140 then 3d_x_rotate 16,av+40: ' MOUVEMENT ouverture DU PONT-LEVIS de l'entrée
      if av>150 and av<235 then 3d_z_rotate 17,prt:3d_z_rotate 18,180-prt:prt=prt-0.5: ' mouvement rotatif ouverture des portes d'entrée
      if av=240 then play 23: ' bruitage de la herse qui se lève
      if av>240 and av<284 then 3d_y_position 15,hrs:hrs=hrs+0.4: ' MOUVEMENT ouverture DE LA HERSE à l'entrée
  gosub affiche:av=av+0.5
  gosub music:if tpm2-tpm1>36.1 then tpm1=tpm2:play 26
until av>=340
3d_hide pk:pk=33:3d_position pk,x,7,z:3d_show pk

' LE HÉROS FAIT 1/2 TOUR
gosub gauche:gosub gauche
3d_hide pk:pk=33:3d_position pk,x,7,z-10:3d_show pk
' FERMETURE DES PONT-LEVIS, PORTES ET HERSE
av=180:play 24: ' bruitage fermeture pont levis
repeat
  3d_x_rotate 16,av:av=av-0.3: ' MOUVEMENT fermeture DU PONT-LEVIS de l'entrée
until av<=90
repeat
  3d_z_rotate 17,prt:3d_z_rotate 18,180-prt:prt=prt+0.5: ' mouvement rotatif fermeture des portes d'entrée
until prt>=360
play 22: ' bruitage de la herse qui se baisse
repeat
  3d_y_position 15,hrs:hrs=hrs-0.4: ' MOUVEMENT fermeture DE LA HERSE à l'entrée
until hrs<=-1
' LE HÉROS REVIENT VERS LA HERSE DE L'ENTRÉE QUI S'EST FERMÉE
av=0:3d_hide pk:pk=131:3d_show pk
repeat
  3d_move 4,0.5:gosub pospk:gosub affiche:av=av+0.5
until av>=20
' LE HÉROS REFAIT 1/2 TOUR
wait 1000:gosub droite:gosub droite
timer_on 4
show 2
return
' ******************************************************************************
' LA SORTIE DU LABYRINTHE
sortie:
timer_off_all
3d_hide int(pk):pk=33:3d_position pk,x,7,z+5:3d_show pk
prt=0:hrs=-1:av=90
repeat
  3d_z_rotate 19,prt:3d_z_rotate 20,180-prt:prt=prt+0.5: ' mouvement rotatif ouverture des portes de sortie
until prt>=90
repeat
  3d_y_position 22,hrs:hrs=hrs+0.5: ' MOUVEMENT ouverture DE LA HERSE à la sortie
until hrs>=30
repeat
  3d_x_rotate 21,av:av=av-0.5: ' MOUVEMENT ouverture DU PONT-LEVIS de la sortie
until av<=0
delete 27:delete 28:delete 29:delete 30
file_load 26,chemin$+"entrée.mp3":play 26
3d_hide int(pk):pk=131:3d_show pk
repeat
  3d_move 4,0.5:av=av+0.5:gosub affiche:gosub pospk:wait 40
until av>=80
gosub pxz:av=270
while scancode=0
      3d_hide pk:pk=pk+1:if pk>130 then pk=34
      3d_position pk,x,7,z:3d_show pk:3d_z_rotate pk,wrap_value(av)
      av=av+3:wait 40
end_while
message "BRAVO, VOTRE HÉROS EST SORTI DU LABYRINTHE!":goto quit

' GESTION DU CHAINAGE SUR LE PROGRAMME SUIVANT ICI <-----------
' POUR LA 3ème PARTIE DE L'AVENTURE
' ******************************************************************************
' LA SORTIE DU PROGRAMME
fin:
if message_confirmation_yes_no("Voulez-vous vraiment quitter ?")<>1 then return
quit:
timer_off_all
delete 4
delete 3
delete 2
delete 1
if object_exists(30)=1 then delete 30
if object_exists(29)=1 then delete 29
if object_exists(28)=1 then delete 28
if object_exists(27)=1 then delete 27
delete 26
delete 25
delete 24
delete 23
delete 22
delete 21
delete 20
terminate
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyMar 27 Déc 2011 - 7:34

Bonjour amis panoramiciens, Wink

La solution de cosmos est très interressante. Merci à Jicehel. Pour le moment, je vais mettre de coté la suite de ce jeu, parce que pas assez de temps pour me plonger à fond dans ce prog. J'y reviendrais pluis tard quand ma femme sera rentrée du pays.
Par contre j'ai trouvé sur le forum un vieux prog, qui ne fonctionne pas ou très mal (plusieurs bugs) que je vais essayer de refaire à ma sauce, bien que j'entrevois d'énormes difficultés à l'horizon. Il faut que je réfléchisse à la façon de procéder et de poser le problème. Je ne sais pas si je vais y arriver! Il va falloir que j'utilise des instructions que je ne connais pas bien encore. Mais c'est une occasion d'apprendre.
Bon courage et bonne programmation à tous! Laughing
Revenir en haut Aller en bas
Invité
Invité




FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyMar 27 Déc 2011 - 12:50

Bonjour.
Est-ce que l'un d'entre-vous peut essayer le programme dont j'ai parlé plus haut pour ralentir l'exécution. J'ai une machine trop lente pour l'inclure dans un jeu.
Spoiler:
J'ai simplement fais une boucle for/next pour voir si ça fonctionné.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyMar 27 Déc 2011 - 15:02

J'essayerais ce soir quand je squatterais un peu l'ordi de mon beau-père. Pour le moment, sur mon portable, inutile de ralentir...
Revenir en haut Aller en bas
exdragon

exdragon


Nombre de messages : 601
Date d'inscription : 05/01/2012

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 9 Jan 2012 - 13:28

J'essaierais ce fort bientôt, car j'ai fort à faire Wink (en ce moment)

Pour ce qui est de la possibilité de changer de vitesse de jeu, tu peu proposer ça par une option sur ton jeu au lieu que ce soit l'utilisateur qui bidouille le code Wink

Parce que de toutes façons un jeu propose souvent une partie options dans son menu, tu pourras le mettre là.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 9 Jan 2012 - 13:35

Oui, mais l'idée, surtout serait d'avoir une vitesse identique (dans la mesure des pssibilité des ordis bien sûr) pendant l'execution du jeu. L'idée, serait d'avoir un niveau d'abstraction permettant de ne pas tenir compte de la puissance de la machine pour faire le programme, d'avoir une fonction qui affiche juste + ou - d'images selon les performances. Sinon, il faut utiliser un timer pour afficher les frames (solution classique en Panoramic).

En fait quand j'y réfléchi bignono, je pense que ce serait la solution (le timer pour afficher les images et un timer qui fasse que si un certain temps s'est écoulé depuis l'affichage de la dernière frame, on passe directement à la nème frame après la courante), mais je n'ait pas d'y que c'était simple à faire ^^

Revenir en haut Aller en bas
exdragon

exdragon


Nombre de messages : 601
Date d'inscription : 05/01/2012

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 9 Jan 2012 - 14:38

Oui tu as raison bien sûr Jicehel, mais je pensais juste dans mon idée, en attendant la modif.
Dans les 90 beaucoup de jeux modernes proposaient une option au cas où ils avaient un pc lent et inversement car cette époque était située entre les deux périodes anciennes et modernes des jeux et du matériel.
Comme solution de dépannage ça peut passer, mais je comprends qu'il vaille mieux LA solution à cette vitesse, et là ne connaissant pas les méandres de Panoramic je ne vois pas oO

Je me demandais, je ne sais pas si l'horloge interne est construite à partir d'un quartz, mais il me semble que si en fait d'après un souvenir, j'ai un doute, car dans ce cas, le quartz gardant sa précision du moment qu'il est bien alimenté, son horloge interne doit être juste et donc il faudrait pouvoir s'en servir comme référence.
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 9 Jan 2012 - 15:58

Bonjour Jicehel,

Oui, utiliser un timer pour le défilement des frames serait peut-être la solution! J'y avais pensé, mais je n'ai pas le temps pour le moment de me replonger dans ce prog, je suis absorbé par un autre programme plus complexe sous de nombreux aspects. Mais dès que ce programme est terminé, j'essaye de me replonger dans FORT LABYRINTH! Very Happy
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 9 Jan 2012 - 16:09

Cool, par ce que ton programme est prometteur, dommage que les champions de la 3D n'y jette pas un oeil pour t'aider à l'optimiser (Perso, c'est plutôt moi qui apprend avec ce que tu fais, puisque moi, en 3D je n'y connaissait vraiment pas grand chose et ne serait-ce que remettre une texture sur un objet, pour moi, ce n'est pas gagné ... Smile )
Tu devrais nous en dire plus sur ton projet actuel, ça fait un moment que tu sous entend que tu bosse sur un gros trucs, mais ma curiosité n'est pas assouvie !! Smile
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 9 Jan 2012 - 19:14

Bonsoir Jicehel, Smile

Content de savoir que tu apprends la 3d grace à moi, mais tu m'as beaucoup aidé sur le sujet du labyrinthe aussi. Mais comme tu dis, c'est malheureux que les champions de la 3d ne me donnent pas un coup de main pour optimiser le code! Je les pardonne, ils sont surement occupés sur leur programme.
Par contre je ne peux pas dire pour l'instant sur quoi je travaille. Désolé, top secret.
Bon je retourne à mon programme, car je ne peux pas rester toute la journée à surveiller le forum.
A +. Wink
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 9 Jan 2012 - 23:17

Comptez pas trop sur moi pour la partie 3D: je maitrise autant qu'une enclume peut voler... Laughing
Revenir en haut Aller en bas
http://nardo26.lescigales.org
exdragon

exdragon


Nombre de messages : 601
Date d'inscription : 05/01/2012

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 9 Jan 2012 - 23:20

Moi aussi il me rend service, quand j'aurais besoin de 3D je pourrais trifouiller dans ce programme pour apprendre Wink
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyLun 9 Jan 2012 - 23:46

Je ne pensais pas à toi Nardo Smile Toi, on sait que ce n'est pas ton domaine, tu serais plutôt le fils spirituel de Klaus Smile
Mais bon, on a des bons en 3D qui passent de temps à autres, dommage qu'ils ne soient plus assidus, ce serait bien qu'ils fassent quelques trucs sympas. Jack a déjà mis dans Panoramic de quoi bien s'éclater avec la 3D et les versions à venir promettent aussi. Quand on a quelqu'un qui fait un prog plutôt avancé comme tu as fait, c'est dommage qu'ils n'en profite pas pour améliorer cet univers 3D. D'autant que si l'on relit un peu les forums, certains ont commencés comme toi mais on arrêté soudainement sans doute faute de soutient.

Perso, j'aime bien que certains fasse des utilitaires, d'autres des jeux 2D, d'autres 3D, certains des DLL qui apportent des fonctions inexistantes à ce jour dans Panoramic et qui mériterait de figurer dans la page principale de Panoramic comme la DLL permettant d'utiliser le port parallèle selon moi, d'autres encore adaptant Panoramic pour mettre en pratique les grands classiques de la programmation, ou des mathématiques appliqués. Tout cela est complémentaire et permet de s'intéresser à autre chose que ce que l'on fait. Bien sûr, ça fait perdre un peu de temps sur ses propres projets, mais c'est enrichissant et sa permet à une communauté d'acharnés de cohabiter et de s'enrichir mutuellement de leurs expériences et de leur vision des choses.

Bon aller, j'ai assez spammé, je vais essayer de programmer un peu ce soir Smile
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyVen 20 Jan 2012 - 13:08

Bonjour amis panoramiciens, Very Happy
Je me dois quand même de vous dire sur quoi je travaille actuellement. C'est un utilitaire, un utilitaire pour la 3d!
Il se présente comme un logiciel de 3d, mais s'en est pas un, loin de là! Il ne me reste plus que 2 fonctions à coder (ouvrir et enregistrer), après, je ferais des tests poussés pour détecter d'éventuels bugs! Le code n'est pas optimisé, et je ne l'optimiserais pas, car il est bâti comme des petits programmes pour chaque fonction où tout le monde pourra piocher pour ses besoins personnels.
Ce petit logiciel vous permettra de concevoir un décor en 3d, d'y implanter des mesh avec leurs textures, de vous positionner où vous voulez dans le décor avec la fonction se déplacer, de règler la lumière, de cacher certains objets, de les positionner, de les tourner, les texturer ou colorer, les déformer comme bon vous semblera. J'ai également coder une fonction qui vous génèrera le code panoramic directement dans un mémo où l'on pourra le sélectionner et le copier pour le coller dans l'éditeur, ou alors vous pourrez directement l'enregistrer en .bas pour l'ouvrir avec l'éditeur. Vous pourrez également prendre une photo de la scène et l'enregistrer.
Je vous joins ci dessous juste le code du menu pour que vous vous rendiez compte de mon travail depuis près d'un mois. Et je remercie particulièrement ceux qui m'ont aidé quand j'avais des problèmes de codages de certaines fonctions. J'espère poster le programme complet dans à peu près 15 jours si tout va bien.
Si vous avez des questions, j'essayerai d'y répondre.
Merci d'avance de votre attention et à + Wink
Code:
label code,propos,nouveau,ouvrir,sauver,quitter
label skbox,plane,actor,mesh,box,cone,cube,cylind,dodeca,line,sphere,texte,torus
label deplacer,taille,rotation,transpar,textur,montrcach,supprimer
label lumiere,axes,cliche,evolue

main_menu 12
' les sous-menus
sub_menu 13:parent 13,12:caption 13,"Fichier"
sub_menu 14:parent 14,12:caption 14,"Objets 3d"
sub_menu 15:parent 15,12:caption 15,"Commandes"
sub_menu 16:parent 16,12:caption 16,"Vues"
sub_menu 17:parent 17,12:caption 17,"Générer Code"  :on_click 17,code
sub_menu 18:parent 18,12:caption 18,"A propos"      :on_click 18,propos
' objet 19 Libre réservé pour extension du menu  --> Aide

' sous-menu Fichier
sub_menu 20:parent 20,13:caption 20,"Nouveau"        :on_click 20,nouveau
sub_menu 21:parent 21,13:caption 21,"Ouvrir"        :on_click 21,ouvrir :' à faire
sub_menu 22:parent 22,13:caption 22,"Enregistrer"    :on_click 22,sauver
sub_menu 23:parent 23,13:caption 23,"Quitter"        :on_click 23,quitter

' sous-menu Objets 3d
sub_menu 24:parent 24,14:caption 24,"3d_skybox"      :on_click 24,skbox
sub_menu 25:parent 25,14:caption 25,"3d_plane"      :on_click 25,plane
sub_menu 26:parent 26,14:caption 26,"3d_actor"      :on_click 26,actor
sub_menu 27:parent 27,14:caption 27,"3d_mesh"        :on_click 27,mesh
sub_menu 28:parent 28,14:caption 28,"3d_box"        :on_click 28,box
sub_menu 29:parent 29,14:caption 29,"3d_cone"        :on_click 29,cone
sub_menu 30:parent 30,14:caption 30,"3d_cube"        :on_click 30,cube
sub_menu 31:parent 31,14:caption 31,"3d_cylinder"    :on_click 31,cylind
sub_menu 32:parent 32,14:caption 32,"3d_dodecahedron":on_click 32,dodeca
sub_menu 33:parent 33,14:caption 33,"3d_line"        :on_click 33,line
sub_menu 34:parent 34,14:caption 34,"3d_sphere"      :on_click 34,sphere
sub_menu 35:parent 35,14:caption 35,"3d_text"        :on_click 35,texte
sub_menu 36:parent 36,14:caption 36,"3d_torus"      :on_click 36,torus

' sous-menu Commandes
sub_menu 37:parent 37,15:caption 37,"Position"      :on_click 37,deplacer
sub_menu 38:parent 38,15:caption 38,"Taille"        :on_click 38,taille
sub_menu 39:parent 39,15:caption 39,"Rotation"      :on_click 39,rotation
sub_menu 40:parent 40,15:caption 40,"Apparence"      :on_click 40,transpar
sub_menu 41:parent 41,15:caption 41,"Texture"        :on_click 41,textur
sub_menu 42:parent 42,15:caption 42,"Cacher/Montrer" :on_click 42,montrcach
sub_menu 43:parent 43,15:caption 43,"Supprimer"      :on_click 43,supprimer

' sous-menu Vues
sub_menu 44:parent 44,16:caption 44,"Lumière"        :on_click 44,lumiere
sub_menu 45:parent 45,16:caption 45,"Axes"          :on_click 45,axes
sub_menu 46:parent 46,16:caption 46,"Cliché"        :on_click 46,cliche
sub_menu 47:parent 47,16:caption 47,"Se déplacer"    :on_click 47,evolue

end

code:
propos:
nouveau:
ouvrir:
sauver:

skbox:
plane:
actor:
mesh:
box:
cone:
cube:
cylind:
dodeca:
line:
sphere:
texte:
torus:

deplacer:
taille:
rotation:
transpar:
textur:
montrcach:
supprimer:

lumiere:
axes:
cliche:
evolue:
return

quitter:
terminate
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyVen 20 Jan 2012 - 13:19

Wait and see ! mais ça promet !
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyVen 20 Jan 2012 - 14:05

Hé bien !!!! j'aurais pas dit mieux. Very Happy
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyVen 20 Jan 2012 - 14:08

Je testerais ça se soir ou demain, le descriptif que tu en fait me parait super interessant ^^. Je te fais un retour et te donne mes idées sur le programme dès que je l'ai testé
Revenir en haut Aller en bas
jpcr

jpcr


Nombre de messages : 276
Age : 57
Localisation : Val de Marne (94)
Date d'inscription : 06/05/2011

FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH EmptyVen 20 Jan 2012 - 14:37

cool Bignono, Very Happy

tu fourniras aussi une doc ou un site web de référence?

jp
Revenir en haut Aller en bas
http://jeanpierre.creis.free.fr/Panoramic/Panoramic.html
Contenu sponsorisé





FORT LABYRINTH Empty
MessageSujet: Re: FORT LABYRINTH   FORT LABYRINTH Empty

Revenir en haut Aller en bas
 
FORT LABYRINTH
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Labyrinth
» FORT DE CAFE
» Script pour afficher la configuration totale de votre ordi
» Compilateur FBPano
» Encore plus fort.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: