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:
- supprimer les commentaires
- 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

