Article     Discussion     Modifier     Historique     Forums     Salon IRC

Gérer un système de script avec 3d games creator

Un article de Games Creators Network.


3dgc et 3dgp possèdent un grand nombre de commandes pour charger différentes choses, mais la plupart du temps pour charger vos maps, les options de votre jeu... vous devez faire appel à des fichiers spéciaux qu'il faut interprêter pour donner à votre jeu les informations dont il a besoin.C'est là qu'interviennent les scripts!

Ce sont des fichiers textes renommés en une autre extension (souvent .dat) et qui permet de stocker les informations dont votre jeu a besoin.

Voici un exemple de scripts:

up=200          ; pour aller vers le haut
down=208        ; pour aller vers le bas
left=203        ; pour aller vers la gauche
right=205       ; pour aller vers la droite
journal=59      ; pour lire son journal
inventaire=60   ; pour acceder a l inventaire
switchview=54   ; touche pour changer de vue
use=18          ; touche pour utiliser

Si vous regardez attentivement ce script, vous pouvez voir des variables à gauche, des valeurs à droite et en bout de lignes des commentaires précédées par un ";".

Il suffit de lire le fichier manuellement avec 3dgc/3dgp et de lui faire repérer les variables, puis leur associer la valeur correspondante.

Mais avant cela, il faut manipuler la chaîne pour:

  1. supprimer les commentaires
  2. séparer la variable et la valeur

C'est cette fonction que j'ai créée qui s'en chargera:

` *******************************************************************
` |  ExplodeStr()
` |
` | décompose la chaîne en deux autres à un caractère précis
` |
` |  PARAMETRES:
` |   - string$: chaîne à décomposer
` |   - part: partie à renvoyer (0 ou 1)
` |   - signe$: caractère séparant les deux parties de la chaîne
` *******************************************************************
function ExplodeStr(string$, part,signe$)
 part0$="" : part1$="" : cur_part=0
 
 for i=1 to len(string$)
  if mid$(string$,i) < >signe$
   if cur_part=0
    part0$=part0$+mid$(string$,i)
   else
    part1$=part1$+mid$(string$,i)
   endif
  else
   cur_part=1
  endif
 next i  
 if part=0
  return$=part0$
 else
  return$=part1$
 endif
endfunction return$

Et voici le code qui traitera le fichier:

open to read 1,file$
while file end(1)=0
 read string 1,temp$
 temp$ = ExplodeStr(temp$,0,";")
 nom_var$ = ExplodeStr(temp$,0,"=")
 valeur$ = ExplodeStr(temp$,1,"=")
 if lower$(nom_var$)="variable1" then variable1$=valeur$
 if lower$(nom_var$)="variable2" then variable2=val(valeur$)
endwhile
close file 1

Ceci est un code "type", si vous voulez l'utiliser, il faut remplacer variable1, variable2 par le nom voulu pour cette variable.

Vous remarquerez que l'on peut charger d'un script une chaîne (variable1), mais aussi un nombre (variable2).

Remarque importante: ne mettez jamais une chaîne entre guillemets dans un script, comme vous pourriez le faire dans un code source.

Voici un exemple permettant de charger instantanément une matrice à partir d'un fichier!

; cet exemple crée une simple matrice
matrix_width=1000
; largeur de la matrice
matrix_height=1000
; longueur de la matrice
matrix_xseg=10 ; nombre de decoupages sur X
matrix_zseg=10 ; nombre de decoupages sur Z

En observant un peu mon code, vous pouvez arriver à faire des codes beaucoup plus complexes gérant la modélisation de la matrice, les normales et l'appliquation de textures. Vous pouvez même rajouter d'autres variables pouvant contenir les propriétés de la matrice...

` *******************************************************************
` |  LoadMatrice(file$)
` |
` | Charge une matrice
` |
` | PARAMETRES:
` |  file$: nom du fichier contenant les infos matrices
` |
` | Retourne le n° de la matrice créée
` *******************************************************************
function LoadMatrice(file$)
 if file exist(file$)=0 then exitfunction   
 for i=1 to 65535      
  if matrix exist(i)=0 then n_matrice=i : break 
 next i  
 open to read 1,file$   
 while file end(1)=0  
  read string 1,temp$ 
  temp$ = ExplodeStr(temp$,0,";")    
  nom_var$ = ExplodeStr(temp$,0,"=")  
  valeur$ = ExplodeStr(temp$,1,"=")   
  if lower$(nom_var$)="matrix_width" then matrix_width=val(valeur$)     
  if lower$(nom_var$)="matrix_height" then matrix_height=val(valeur$)   
  if lower$(nom_var$)="matrix_xseg" then matrix_xseg=val(valeur$)     
  if lower$(nom_var$)="matrix_zseg" then matrix_zseg=val(valeur$)      
  if lower$(nom_var$)="texture" then texture$=valeur$       
  if lower$(nom_var$)="texture_xseg" then texture_xseg=val(valeur$) 
  if lower$(nom_var$)="texture_zseg" then texture_zseg=val(valeur$)
 endwhile
 close file 1
 make matrix n_matrice, matrix_width, matrix_height, matrix_xseg, matrix_zseg
 if texture$ < >"" then
  if file exist(texture$)=1  
  load image texture$,999+n_matrice  
  prepare matrix texture n_matrice, 999+n_matrice, texture_xseg, texture_yseg 
 endif
 open to read 1,file$    
 while file end(1)=0     
  read string 1,temp$   
  temp$ = ExplodeStr(temp$,0,";")  
  nom_var$ = ExplodeStr(temp$,0,"=")  
  valeur$ = ExplodeStr(temp$,1,"=")  
  if lower$(nom_var$)="data_height"  
   for x=1 to xseg       
    for z=1 to zseg         
     read string 1,temp$ : hauteur=val(temp$)  
     set matrix height n_matrice, xseg, zseg, hauteur    
    next z       
   next x    
  endif    
  if lower$(nom_var$)="data_normal"    
   for x=1 to xseg         
    for z=1 to zseg           
     read string 1,temp$ : nx=val(temp$)          
     read string 1,temp$ : ny=val(temp$)     
     read string 1,temp$ : nz=val(temp$)
     set matrix normal n_matrice, xseg, zseg, nx,ny,nz
    next z
   next x
  endif
  if lower$(nom_var$)="data_tile"
   for x=1 to xseg
    for z=1 to zsegv
     read string 1,temp$ : tile_n=val(temp$)
     set matrix tile n_matrice, xseg, zseg, tile_n
    next z
   next x
  endif
 endwhile
 close file 1
 update matrix n_matrice
endfunction n_matrice


Ce document a été publié sur la version 3 du G.C.N. par MrCool.

  • Auteur Original : MrCool
  • Date de publication : 2002

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.