AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
Cartes Pokémon EV6.5 : où trouver le ...
Voir le deal

 

 [Tutoriel] [Non Finis] Créer ses propres sauvegardes

Aller en bas 
+13
robinlife
Qual
SPLN
Boudou
Chulien
CoDeAVE
Mass
nicoulas
[TheDarkTiger]
Randal
Wargamer
glcraft
onilink_
17 participants
Aller à la page : 1, 2, 3  Suivant
AuteurMessage
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 13:31

Créer des sauvegardes protégées et légères


Sommaire
1 – Introduction
2 – Sauvegarde de base
3 – Introduction au sauvegardes octets par octets
->a - Stocker des nombres signés et non signés entiers
->b - Types de données
->c - Fonctions de sauvegardes et lecture par type de données
4 – Protection de la sauvegarde
(en cours)
5 – Cryptage de la sauvegarde


1 – Introduction

Contrairement a ce que la plupart des personnes pensent, créer une sauvegarde n'est pas une chose aisée. Pourquoi ?
Tout simplement parce qu'une bonne sauvegarde doit respecter ces critères :
-Légère
-Fiable (pas d'erreurs après chargement)
-Rapide a charger
-Non modifiable par le joueur (même s'il est malin xD)

Déjà certains ce disent "pourquoi créer ses sauvegardes alors que gm les gèrent avec game_save() ?"
Je répondrait simplement que ce type de sauvegardes ne répond pas au critères précédents, et tout particulièrement au premier (elles peuvent atteindre plusieurs mo), de même elle peuvent parfois causer des erreurs selon l'envergure du projet.

Donc comment faire ? Et ben tout simplement faire ses propres sauvegardes, et ce tuto est la pour vous guider Wink


2 – Sauvegarde de base pour commencer

Le but de la sauvegarde est de garder en mémoire certaines variables afin de ne pas tout recommencer depuis le début.
Par exemple pour un jeu comportant ces variables :
argent / sante / positionx_carte / positiony_carte / munitions
nous allons écrire dans dans un document texte les valeurs des variables afin de pouvoir les charger.

savegame()

Code:

var f;
//On ouvre un fichier texte pour y écrire
f = file_text_open_write('file.txt')

//On y écrit les valeurs de nos variables
file_text_write_string(f,string(argent) )
file_text_writeln(f)
file_text_write_string(f,string(sante) )
file_text_writeln(f)
file_text_write_string(f,string(positionx_carte) )
file_text_writeln(f)
file_text_write_string(f,string(positiony_carte) )
file_text_writeln(f)
file_text_write_string(f,string(munitions) )
file_text_writeln(f)

file_text_close(f)

et pour récupérer les valeurs :

loadgame()
Code:

var f;
//On ouvre charge la sauvegarde si elle existe
if(file_exists('file.txt'))
    f = file_text_open_read('file.txt')
else
    return false//erreur
//On y lis les valeurs de nos variables
argent = file_text_read_real(f)
file_text_readln(f)
sante = file_text_read_real(f)
file_text_readln(f)
positionx_carte = file_text_read_real(f)
file_text_readln(f)
positiony_carte = file_text_read_real(f)
file_text_readln(f)
munitions = file_text_read_real(f)
file_text_readln(f)

file_text_close(f)
return true

Vous l'avez compris ce n'est pas une sauvegarde qui répond a nos critères mais elle est la pour comprendre le principe.
Si on sauvegarde et qu'on ouvre notre fichier file il seras très simple de modifier les valeurs puisque ce ne sont que des chiffres écrits lignes par lignes.
Le fichier d'exemple ce situe dans Exemple 1.

Nous avons crée une sauvegarde mais avec beaucoup de variables elle pouras etre très lourde, puis elle n'est pas du tout sécurisée.
Nous allons donc essayer de remédier a ces problèmes.


3 – Introduction aux sauvegardes octets par octets

Un des moyens de diminuer la taille d'une sauvegarde est d'utiliser seulement la mémoire nécessaire pour stocker la variable. Si elle ne peut prendre que des valeurs de 0 à 255 il est possible de diviser par cinq l'espace mémoire que l'on prendra (en comparaison a l'exemple précédent).

Avant de ce lancer dans cette partie il faut savoir ce qu'est un octet, ou byte en anglais (a ne pas confondre avec bit).
Un byte est un champ de mémoire constitué de huit bits.
Les bits ne peuvent prendre que deux valeurs, 1 ou 0.
Le byte étant constitué de huit bits il peut donc prendre 2 puissance 8 valeurs possibles soit 256 valeurs.
Exemple :
-un byte vide en binaire : 0000 0000
-un byte 'plein' : 1111 1111 (soit 255 en décimal)

Game maker possède des fonctions permettant d'écrire dans des fichiers bytes a bytes, et c'est ces fonctions que nous allons utiliser (ces fonctions commencent par file_bin)

Voici un apperçu des fonctions que nous allons utiliser :
file_bin_open(fname,mode) avec fname le nom du fichier et le mode (0:lecture, 1:écriture, 2:les deux a la fois)
file_bin_close(f) ferme notre fichier avec f la variable que l'on a assigné a file bin open
file_bin_write_byte(f,byte) ecrit le byte (0 a 255) dans notre fichier
file_bin_read_byte(f) lis un byte
Je vous laisse lire la doc pour les autres fonctions. En tout cas, vous devez l'avoir remarqué, le principe d'utilisation est le même que pour les file_text.

Nous allons donc faire un remake de notre première sauvegarde en utilisant les file bin.
Pour cela il vas falloir définir le nombre d'octets que chaque variable peut prendre. Dèja nous allons définir l'intervalle des valeurs possibles de nos variable.

argent : de 0 à 10 000
sante : de 0 à 200
positionx_carte : de 0 à 1000
positiony_carte : de 0 à 500
munitions : de 0 à 50

On regarde donc combien d'octets chaque variable doit prendre en sachant que
1 octet peut stocker : 0 à 255
2 octets : 0 à 65535 (256*256)
On a donc :
argent : 2 octets
sante : 1 octet
positionx_carte : 2 octets
positiony_carte : 2 octets
munitions : 1 octet
Notre sauvegarde feras donc 8 octets, ce qui est très léger ^^.

Bon j'imagine que pour enregistrer une variable qui tient juste sur un octet ça ne pose de problème a personne.
Exemple : file_bin_write_byte(f,munitions)

Par contre que faire si elle prend plus d'un octet ? Et ben c'est la ou on va avoir besoin des opérateurs binaires (un tuto étant disponible au cbna).
Ne vous inquiétez pas si vous ne comprenez pas cette partie (qui est un peu compliquée) car je mettrais a votre disposition des fonctions qui vous permettrons d'écrire vos variables sans se prendre la tête ...

a) Stocker des nombres signés et non signés entiers

Prenons argent qui prend 2 bytes, il va faloire le décomposer en deux bytes distincts :
on auras donc :
-Le premier byte d'argent s'obtient de cette manière :
argent & 256
Le & 256 va permettre de ne garder que le premier byte.
-Et le second :
argent >> 8
On décale les bits vers la droite d'un byte donc on fait disparaitre le premier byte.

De cette manière on peut écrire argent dans un fichier comme ça :
file_bin_write_byte(f, argent & 256 )
file_bin_write_byte(f, argent >> 8 )
Par convention on ecrit l'octet de faible en premier, car c'est comme ça que les varables sont ecrites en C/C++ (l'octet codant les valeurs les plus faibles), qui est ici argent & 256

Maintenant pour récupérer argent il suffiras de lire chaque octet et de le replacer a ça position initiale :

argent = file_bin_read_byte(f) + ( file_bin_read_byte(f) << 8 )

Imaginons que notre variable puisse en plus aller dans des valeurs négatives. On a deux solutions :
-Utiliser un octet supplémentaire pour le signe
-Utiliser un bit pour le signe

Ici je vais vous expliquer la deuxième option, la première étant au niveau de tous.

Un octet peut prendre 256 valeurs possible car il est constitué de 8 bits ( 256 = 2 puissance 8 )
Mais si nous voulons prendre un bit pour le signe il ne nous resteras que que 7 bits pour notre nombre, qui seras alors compris entre 0 et 127 (128 = 2 puissance 7)
Au final, si le premier bit code pour le signe, on auras alors des valeurs de -127 à 127 en utilisant 1 byte seulement.

En gros notre byte vas calculé de cette manière pour la variable VAR par exemple qui seras comprise entre -127 et 127 :

byte = ( (VAR>-1) << 7 ) + VAR

Pour faire simple :
-si VAR est positif : byte = 128 + VAR
-et si var negatif : byte = VAR
On aurais pu tout autant faire l'inverse bien entendu

En suite pour lire le byte et recuperer la valeur il suffit de virer le premier bit et choisir le signe en fonction de celui ci :

VAR = (byte & 128)
if( byte >> 7 == 0 ) VAR *= -1

Voila, si vous avez compris ceci, vous connaissez la base de certains types de données. Je vais par la suite vous en apprendre d'autres, et vous donner une série de fonctions permettant d'automatiser tous ces calculs, simplement et rapidement.
Cette partie etait pour apprendre la logique caché par les types de données, mais dans la suite je vais vous apprendre a utiliser de vrais types de donnés, utilisables en C/C++. Vos sauvegardes seront donc compatible en C/C++ et même la plupart des langages.


b) Types de données

Vous allez devoir apprendre quelques types de variables pour cela :

[1 octet]
char : de -128 à 127
unsigned char : de 0 a 255

[2 octets]
short int : de -32 768 à 32 767
unsigned short int : de 0 à 65 535

[4 octets]
int : de -2 147 483 648 à 2 147 483 647
unsigned int : de 0 à 4 294 967 295
float : de -3.4*10^-38 à 3.4*10^38

[8 octets]
double : de -1.7*10^-308 à 1.7*10^308

unsigned signifie non signé. Tous les types a part le float et le double codent des entiers (integer en anglais). Sous GM les variables sont toutes codés sur des doubles, pour les valeurs, ou des tableaux de char pour les string. D'ou la lourdeur des variables, qui prennent un minimum de 8 octets...

Chaque type a une structure qui lui est propre. Le plus simple est le unsigned char : la valeur est juste stockée dans un octet.
Le char fonctionne presque de la même manière mais un bit coderas pour le signe. De même pour les short int, int, etc.
Par contre le float et le double sont légèrement plus complexes.

Le float, qui est un nombre a virgule (un flottant), et est signé va prendre :
-23 bits pour la mantisse
-8 bits pour l'exposant
-1 bit pour le signe

Le double, qui est un grand float va prendre :
-52 bits pour la mantisse
-11 bits pour l'exposant
-1 bit pour le signe

La mantisse ? C'est quoi ?
Vous connaissez la notation scientifique d'un nombre ? Par exemple 15000 s'écrit 1,5x10^4. Et bien ici la mantisse est 1,5 et nous avons 4 en exposant.
En gros tout nombre peut s'écrire [signe][mantisse][exposant].
Bon un float va stocker tout ça en base deux dans 4 octets. Le principe est assez compliqué, je mettrais la source et peut être je l'expliquerais.

Parlons un peu des string, ou chaines de caractères. Les string sont en fait des tableaux de caractères. Chaque case du tableau contient un caractère codé sur un octet. Avec GM, nous ne pouvons accéder a chaque case du tableau qu'avec un string_copy mais dans d'autre langages tels que le C nous pouvons faire tout simplement str[0] et hop on obtient le premier caractère de notre string. Pour sauvegarder un string byte a byte, ben rien de plus simple, il suffit d'écrire la valeur de chaque caractère de notre string dans notre fichier a la suite.


c - Fonctions de sauvegardes et lecture par type de données

Les structures de données qui suivent sont dans ce fichier : http://host-a.net/onilink_/types.gml

Ecriture d'un char :

Code:
file_bin_write_byte(argument0, argument1)

Lecture d'un char :
Code:
var b;
b = file_bin_read_byte(argument0)
return (b&$7F) - (b&$80)

Ecriture d'un unsigned char
Code:
file_bin_write_byte(argument0, argument1)

Lecture d'un unsigned char
Code:
return file_bin_read_byte(argument0)

Ecriture d'un short int
Code:
argument1 += $10000
file_bin_write_byte(argument0, argument1 & $FF)
file_bin_write_byte(argument0, argument1 >> 8)

Lecture d'un short int
Code:
var b1, b2;
b1 = file_bin_read_byte(argument0)
b2 = file_bin_read_byte(argument0)
return b1 + ((b2&$7F) - (b2&$80)<<8)

Ecriture d'un unsigned short int
Code:
file_bin_write_byte(argument0, argument1 & $FF)
file_bin_write_byte(argument0, argument1 >> 8)

Lecture d'un unsigned short int
Code:
return file_bin_read_byte(argument0) + (file_bin_read_byte(argument0)<<8)

Ecriture d'un int
Code:
if(sign(argument1) == -1) {
argument1 = abs(argument1)
file_bin_write_byte(argument0, $100 - (argument1 & $FF) )
file_bin_write_byte(argument0, $FF - ((argument1>>8) & $FF) )
file_bin_write_byte(argument0, $FF - ((argument1>>16) & $FF) )
file_bin_write_byte(argument0, $FF - (argument1>>24) )
}
else {
file_bin_write_byte(argument0, argument1 & $FF)
file_bin_write_byte(argument0, (argument1>>8) & $FF)
file_bin_write_byte(argument0, (argument1>>16) & $FF)
file_bin_write_byte(argument0, argument1>>24)
}

Lecture d'un int
Code:
var b1, b2, b3, b4;
b1 = file_bin_read_byte(argument0)
b2 = file_bin_read_byte(argument0)
b3 = file_bin_read_byte(argument0)
b4 = file_bin_read_byte(argument0)
return b1 + (b2<<8) + (b3<<16) + ((b4&$7F) - (b4&$80)<<24)

Ecriture d'un unsigned int
Code:
file_bin_write_byte(argument0, argument1 & $FF)
file_bin_write_byte(argument0, (argument1 >> 8) & $FF)
file_bin_write_byte(argument0, (argument1 >>16) & $FF)
file_bin_write_byte(argument0, argument1 >> 24)

Lecture d'un unsigned int
Code:
return file_bin_read_byte(argument0) + (file_bin_read_byte(argument0)<<8)
+(file_bin_read_byte(argument0)<<16) + (file_bin_read_byte(argument0)<<24)

Ecriture d'un float
Code:
var s, exponent, mantissa, tmp, bexp, b3, b2, b1;

s = ( sign(argument1) == -1 ) << 7
argument1 = abs(argument1)
exponent = floor( log2(argument1) )
if(exponent > 0)
mantissa = argument1/(1<<exponent) - 1
else
mantissa = argument1*(1<<-exponent) - 1
tmp = mantissa

b3 = mantissa*(1<<8)
tmp = frac(b3)
b2 = tmp*(1<<8)
tmp = frac(b2)
b1 = tmp*(1<<8)

b1 = floor(b1)
b2 = floor(b2)
b3 = floor(b3)
bexp = exponent + 127

file_bin_write_byte(argument0, ((b2&1)<<7) | (b1>>1) )
file_bin_write_byte(argument0, ((b3&1)<<7) | (b2>>1) )
file_bin_write_byte(argument0, (b3>>1) | ((bexp&1)<<7) )
file_bin_write_byte(argument0, s | (bexp>>1) )

Lecture d'un float
Code:
var b1, b2, b3, b4, s, exponent, mantissa;
b1 = file_bin_read_byte(argument0)
b2 = file_bin_read_byte(argument0)
b3 = file_bin_read_byte(argument0)
b4 = file_bin_read_byte(argument0)

if(b4&$80)
s=-1 else s=1

exponent = ((b4&$7F)<<1) + (b3>>7) - 127
b3 = b3&$7F
mantissa = 1+b3/(1<<7)+b2/(1<<15)+b1/(1<<23)

if(exponent > 0)
    return s*mantissa*(1<<exponent)
return s*mantissa/(1<<-exponent)

Ecrire une chaine de caractere (string)
Code:
var i;
for(i=0  ; i<string_length(argument1) ; i+=1)
file_bin_write_byte(argument0, ord( string_copy(argument1, i+1, 1) ) )

Lire une chaine de caractères (string)
Code:
var str, i;
str = ""
for(i=0 ; i<argument1 ; i+=1)
str += chr( file_bin_read_byte(argument0) )
return str


Voila désormais vous pourrais utiliser ces structures de données simplement, je vous conseille de ne pas trop utiliser les float a cause de la lenteur de GM, et utilisez des short int plutot que des int, ça permet d'économiser de l'espace, et aussi de ne pas avoir des valeurs faussés a cause de GM...
Quand a string il suffit d'entrer la taille de la chaine de caractère en second parametre pour la lecture.



4 – Protection de la sauvegarde

Bon, maintenant avec toutes ces fonctions il est simple de faire un système de sauvegarde. Je vais vous donner quelques exemples de systèmes de sauvegardes pour que l'on puisse travailler dessus : http://host-a.net/onilink_/TutoSavePack.rar (dernier upload le 13/7/10 a 15h38)

Comment protéger une sauvegarde efficacement et simplement ?
Il existe de nombreuses façon pour proteger une sauvegarde, mais une est beaucoup utilisée dans le domaine des jeux vidéos et très simple a mettre en place. Je l'ai trouvé en hackant une sauvegarde d'un vieux Zelda sur GBC, et elle m'a donné du fil a retordre. Cette même methode est aussi utilisée dans de nombreux jeux de console portables, bien que le principe évolue avec le temps...

Ici nous allons utiliser une amélioration du principe de protection dont je parlais pour le Zelda, comme ça, votre sauvegarde ne risqueras "presque" rien.

Prenez le fichier save dans le dossier "Sauvegarde de Base" qui fait partie du pack TutoSavePack.rar.
Si vous l'ouvrez avec un editeur héxadécimal, vous remarquerez que les string apparaissent tels quels, et donc qu'ils sont simples a remplacer. De plus si vous modifiez une quelconque valeur, ben le jeu se chargeras sans problemes, et la sauvegarde auras été hackée, très simplement.

La technique de protection consiste en fait a prendre notre sauvegarde, a ajouter tous les bytes pairs dans une variable et a la metre modulo 256, puis de même pour les bytes impairs. Ensuite on sauvegarde ces deux octets ou l'on veux, mais de préférence la ou l'on a pas additionné les bytes a nos variables. De cette façon, on auras 2 bytes qui aurons une valeur en fonction de tous les autres bytes, et nous pourons alors verifier que leur valeur est normale au chargement, sinon c'est que notre sauvegarde a été "hackée", on afficheras un message de corruption pour faire stresser le "hacker" : "votre ordi va etre formaté suite a cette tentative de hack hinhinhin".
Bien sur je vous parle de byte pair et impair, mais ce n'est qu'un exemple, vous pouvez sauvegarder un byte sur trois, ou selon les décimales de pi par exemple. Par contre n'oubliez pas de faire en sorte que tous les bytes soient additionnés au moins dans une variable.

Pour améliorer cette technique qui peut être contournée par des personnes ayant un minimum de cervelle et de patience, qui vont comparer différentes sauvegardes pour voirs quels bytes changent en fonction des autres nous allons sauvegarder des variables inutiles, et qui vont prendre des valeurs hazardeuses afin de déstabiliser notre hacker.

J'ai fait un exemple de sauvegarde protégé dans le pack pour les flemmards.

Maintenant je vais faire le point sur certains parametres qui permettrons a votre sauvegarde d'être plus ou moins protégée :
-Un sauvegarde de grande taille seras plus dure a hacker.
-Plus il y a de bytes randomisés, plus dur il seras de hacker la sauvegarde.
-Plus vous mettrez de bytes de protection (ceux qui verifient les valeurs des autres), moins votre sauvegarde seras hackable. De plus, n'utilisez pas toujours la combinaison pair/impair, mais essayez des methodes plus élaborées.

Désormais votre sauvegarde est protégé. Il ne reste plus qu'a la crypter pour la rendre invulnérable xD



_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes MdetltS


Dernière édition par onilink_ le Ven 29 Juil 2011 - 19:43, édité 25 fois
Revenir en haut Aller en bas
glcraft
Utilisateur confirmé: Rang *****
glcraft


Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 14:32

c'est bien la technique de l'octet, ca compresse le fichier et ca prend moin de place, c'est tres utile super
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
Invité
Invité




[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 15:34

Il n'y a pas de compression, il définit le nombre d'octets a utiliser selon le type de la variable, m'enfin, a part économiser quelques octets et msec de chargement ça ne fera pas du grand bien à gm puisqu'il ne supporte qu'un seul type de variable (malheureusement)...
Revenir en haut Aller en bas
Wargamer
*Excellent utilisateur*
Wargamer


Messages : 6938
Projet Actuel : Bataille de cake au fruits

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 16:35

au risque de passé pour un con, utilité de fiare un décalage sur un byte déja extrait et qui donne déja la bonne valeur?
edit: ok je vois c'est ton système de protection qui consiste à tout décomposer en octet

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes Wargamer3
Règle #1 du CBNA, ne pas chercher à faire dans la subtilité; personne comprend


Dernière édition par Wargamer le Sam 10 Juil 2010 - 17:48, édité 1 fois
Revenir en haut Aller en bas
Randal
Utilisateur confirmé: Rang **



Messages : 446

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 16:59

C'est trop intellectuel pour moi tout ce bazar, je sais pas où tu apprends tout ça mais t'en sais des choses sur le codage. :oui:
Revenir en haut Aller en bas
Wargamer
*Excellent utilisateur*
Wargamer


Messages : 6938
Projet Actuel : Bataille de cake au fruits

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 17:02

un bon livre de prog + être nolife :nah:

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes Wargamer3
Règle #1 du CBNA, ne pas chercher à faire dans la subtilité; personne comprend
Revenir en haut Aller en bas
[TheDarkTiger]
Modérateur
[TheDarkTiger]


Messages : 7420
Localisation : Essonne

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 17:14

N'importequoi ...

Il vous sert des explications plutôt simple sur l'utilisation des octets, et vous dites qu'il faut être nolife ou que c'est trop complexe ...

Vous êtes vous seulement donné la peine de comprendre ce qu'il vous propose ?
De faire un petit script vite fait dans un nouveau GMK pour tester ?
Si non, alors essayez, si oui, alors retournez à votre pong en D&D.

_________________
Bonne chance pour vos projets actuels ! Prêt à aider ceux qui en ont besoin ^^
[Tutoriel] [Non Finis] Créer ses propres sauvegardes U3dfr2[Tutoriel] [Non Finis] Créer ses propres sauvegardes Sign l'antique
Bienvenue au 2630eme utilisateur : Mike Kennedy !
Revenir en haut Aller en bas
http://www.tdms.fr
nicoulas
*Excellent utilisateur*
nicoulas


Messages : 6030
Localisation : Dordogne
Projet Actuel : Croustaface Tower Defense [Tutoriel] [Non Finis] Créer ses propres sauvegardes Panicpr9

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 17:27

Lol TDT, même si je suis un peu d'accord.

@Onilink : vraiment cool ce (début) de tuto, j'avais déjà pensé à comment faire des sauvegardes, mais pour faire plus simple, j'avais pensé fichier texte (pas un .ini hein) + encryption, mais ta méthode est encore meilleure (mais plus compliquée ^^). Enfin entk c'est vraiment intéressant, même si j'ai pas encore trop pigé comment fonctionnent les opérateur binaires pour découper les variables en plusieurs octets.

Vivement la suite super
Revenir en haut Aller en bas
http://blithe.nd.free.fr/
Randal
Utilisateur confirmé: Rang **



Messages : 446

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 17:49

On gagne quelques octets au final par apport à la fonction de base ?
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 10 Juil 2010 - 18:40

Les explications sont intéressantes, moi qui comprends pas grand chose aux système des fichiers j'apprends plein de trucs Smile

En tout cas je vais étudier ce truc de près, mais tu feras un paragraphe sur les strings ?

_________________
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
CoDeAVE
Utilisateur confirmé: Rang **
CoDeAVE


Messages : 408
Localisation : Québec

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyDim 11 Juil 2010 - 0:19

Wargamer a écrit:
un bon livre de prog + être nolife :nah:

Mal dit. On peut très bien avoir une très bonne vie social et être bon en prog suffit d'avoir de la discipline et d'apprendre comment apprendre par soi même. Je suis même de ceux qui croit qu'un bon équilibre entre sa passion et sa vie social vous rend meilleur dans votre passion. Du temps où je pensais toutes mes journées à programmer, je devenais très fatigué et moins productif. Prendre des pauses ça aide... quand vous revenez ensuite vous avez pleins d'idées et d'inspiration.

[TheDarkTiger] a écrit:
N'importequoi ...

Il vous sert des explications plutôt simple sur l'utilisation des octets, et vous dites qu'il faut être nolife ou que c'est trop complexe ...

Vous êtes vous seulement donné la peine de comprendre ce qu'il vous propose ?
De faire un petit script vite fait dans un nouveau GMK pour tester ?
Si non, alors essayez, si oui, alors retournez à votre pong en D&D.

Bien dit, tout à fait d'accord avec toi. Il a la gentillesse de nous offrir de son temps en nous fessant un bon tutoriel et il se fait dire qu'il n'a pas de vie.

Très bon tuto en passant onilink_, un bon membre qui apporte plein de trucs interessant au CBNA^^!
Revenir en haut Aller en bas
glcraft
Utilisateur confirmé: Rang *****
glcraft


Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyDim 11 Juil 2010 - 1:38

CoDeAVE a écrit:
[TheDarkTiger] a écrit:
N'importequoi ...

Il vous sert des explications plutôt simple sur l'utilisation des octets, et vous dites qu'il faut être nolife ou que c'est trop complexe ...

Vous êtes vous seulement donné la peine de comprendre ce qu'il vous propose ?
De faire un petit script vite fait dans un nouveau GMK pour tester ?
Si non, alors essayez, si oui, alors retournez à votre pong en D&D.

Bien dit, tout à fait d'accord avec toi. Il a la gentillesse de nous offrir de son temps en nous fessant un bon tutoriel et il se fait dire qu'il n'a pas de vie.

Très bon tuto en passant onilink_, un bon membre qui apporte plein de trucs interessant au CBNA^^!

c'est vrai !
Soyez logique, qui refuserait un tutoriel, qui EN PLUS est redigé par onilink_, franchement il y a pas mieux que lui pour faire des tutos compliquée mais expliqué d'une simplicité en ce moment. Actuellement j'ai lu tout ces tutos et je les ai tous compris (celui la compris !). C'est ecrit de la maniere la plus simple que l'on puisse faire.
L'un des tutos que j'ai lu aussi (mais ca, ca regarde que moi gnii) c'est les operations binaires qui, encore une fois est fait par onilink_, ce tutoriel est simple a lire, a comprendre, la facon dont il a expliqué comment comvertir les chiffres en octet etait vraiment tres elaboré mais pourtant si simple. Ici c'est pareil mais avec une nouvelle methode (la precedente c'etait avec des boites il me semble) !
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyLun 12 Juil 2010 - 12:45

Merci Gabin ^^
Sinon vous en faites pas , jsuis pas no-life , la preuve je viens de feter mon BAC depuis 2 jours hohoho
Et puis comme le fait remarquer TDT, y a rien de compliqué a tout ça, j'ai meme reussi a le faire comprendre a une fille de ma classe qui n'avais jamais touché a la prog x)
Puis mass oui tu a raison je vais m'occuper aussi des str, et le tuto est très loin d'etre finis, y a pas encore de cryptage, et encore moins de protections...

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes MdetltS
Revenir en haut Aller en bas
Invité
Invité




[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyLun 12 Juil 2010 - 13:19

de toute façon la prog, objectivement, c'est pas si compliqué, juste très mal connu. Par exemple le programme de physique, j'suis sûr qu'intellectuellement, c'est du même niveau que des bases en programmation, mais voilà, on en parle pas à l'école, alors à moins de s'y intéresser, beaucoup de gens n'y toucheront jamais.

Ah et je pense que je vais essayer ce tutorial pour les sauvegardes de mon prochain jeu, je reposterai si j'ai des problèmes.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyLun 12 Juil 2010 - 13:55

oui, enfin attend que j'ai finis la partie sur les sauvegardes bytes par bytes, car il y a quelques erreurs, et surtout c'est pas finis, tu rique de te prendre la tête pour rien x)

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes MdetltS
Revenir en haut Aller en bas
glcraft
Utilisateur confirmé: Rang *****
glcraft


Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyLun 12 Juil 2010 - 17:20

onilink_ a écrit:
y a pas encore de cryptage, et encore moins de protections...
je suis impatient de voir ca, ca pourrait m'etre utile [Tutoriel] [Non Finis] Créer ses propres sauvegardes Ange2 !
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyMar 13 Juil 2010 - 16:14

J'ai presque finis le tuto pour les intéressés, manque juste la partie sur le cryptage, qui est facultative, bien que ce soit toujours un plus.
N'hésitez pas a poser questions et suggestions afin que je puisse améliorer au maximum ce tuto :pac_dr:

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes MdetltS
Revenir en haut Aller en bas
Wargamer
*Excellent utilisateur*
Wargamer


Messages : 6938
Projet Actuel : Bataille de cake au fruits

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyMar 13 Juil 2010 - 16:20

compression par une clé aléatoire de 512 bits? heheh

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes Wargamer3
Règle #1 du CBNA, ne pas chercher à faire dans la subtilité; personne comprend
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyMar 13 Juil 2010 - 16:29

troll face non 2048, meme la nasa ne pourras rien faire contre guns

Plus serieusement je n'ai pas mis une seule fois le mot compression dans ce tuto, mais rien ne vous empeche d'utiliser une DLL pour ça, ça pourrais être intéressant mais ce n'est pas nécessaire, loin de la

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes MdetltS
Revenir en haut Aller en bas
Invité
Invité




[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyMar 13 Juil 2010 - 17:16

je suppose que tu va choisir xor comme algorithme de cryptage de base ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyMar 13 Juil 2010 - 17:51

oui certainement, mais je vais essayer d'en montrer d'autres parce que xor, on commence a le connaitre x)

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes MdetltS
Revenir en haut Aller en bas
Invité
Invité




[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyMar 13 Juil 2010 - 19:52

ouais enfin utiliser des algo de cryptage hyper compliqué pour quelques octets c'est un peu exageré je trouve... enfin je dis ça parce que xor est plutôt simple et efficace, au pire j'inverserai l'ordre de bits.

bonne rédaction alors. :-D
Revenir en haut Aller en bas
Chulien
Utilisateur confirmé: Rang *****
Chulien


Messages : 2232

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyLun 6 Sep 2010 - 13:35

merci pour le tuto, moi qui ne me suis jamais intéressé à l'écriture de fichiers binaires dans gm, ça va m'être très utile!
Revenir en haut Aller en bas
http://sites.google.com/site/chuliendev
Boudou
Utilisateur confirmé: Rang ***
Boudou


Messages : 557
Localisation : Marseille
Projet Actuel : Boudou

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyLun 6 Sep 2010 - 15:49

Je connaissais déjà, mais je vois pas vraiment ce qu'il y a de très difficile.

Revenir en haut Aller en bas
http://moongaming.idoo.com/
SPLN
Utilisateur confirmé: Rang ***
SPLN


Messages : 588
Localisation : Sur son ordinateur *vous vois* arrêtez de me regarder comme ça
Projet Actuel : En quête de projet(s)!
Mes projets:
SP Lecteur Multimedia (Stand by)
S-Portable Graphics (demo1.8 is out! demo2.0 is planned)
SSB RPG (Stand by)

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyLun 6 Sep 2010 - 16:15

Le cryptage & le fait de ne pas savoir tous simplement.
Même si je connaissais déjà une partie du tuto.

_________________
SP Lecteur Multimedia
I am an [Tutoriel] [Non Finis] Créer ses propres sauvegardes Gmq4 in the GM Quiz!
Revenir en haut Aller en bas
http://sp-lecteur-multimedia.skyrock.com/
Qual
Utilisateur confirmé: Rang ****
Qual


Messages : 1450
Projet Actuel : Tower Defence

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyLun 6 Sep 2010 - 16:20

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Super
Revenir en haut Aller en bas
http://www.brainwizz.fr
Chulien
Utilisateur confirmé: Rang *****
Chulien


Messages : 2232

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptyLun 6 Sep 2010 - 16:29

disons qu'un débutant ne devrait pas se lancer tout de suite là dedans
Revenir en haut Aller en bas
http://sites.google.com/site/chuliendev
robinlife
Utilisateur confirmé: Rang ****
robinlife


Messages : 977

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 6 Aoû 2011 - 12:47

Super tuto oni !
Juste à un moment quand y'a
Code:

var name_length;
name_length = b_read_uchar(f)
Pourquoi pas
Code:

var name_length = b_read_uchar(f);
?

_________________
suivez moi sur ig : @kostozbrr
Revenir en haut Aller en bas
Invité
Invité




[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 6 Aoû 2011 - 13:58

J'y connais rien en GML mais je crois que c'est pour initialiser la variable.
Revenir en haut Aller en bas
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes EmptySam 6 Aoû 2011 - 14:25

C'est juste une autre syntaxe.
On pourrait même écrire :
Code:
name_length = b_read_uchar(f);
Revenir en haut Aller en bas
Contenu sponsorisé





[Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes Empty

Revenir en haut Aller en bas
 
[Tutoriel] [Non Finis] Créer ses propres sauvegardes
Revenir en haut 
Page 1 sur 3Aller à la page : 1, 2, 3  Suivant
 Sujets similaires
-
» creer ses propres fonts
» [Tutoriel] Créer une variable
» [Tutoriel] Créer une Dll en C/C++ pour GameMaker
» Tutoriel : Créer un texte animer
» Tutoriel debutants : créer un jeu de tir vu de haut

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Game Maker-
Sauter vers: