| Les Exemples de Caly | |
|
+7M@d_Doc onilink_ D-z Topaze22 marty master47 Caly 11 participants |
|
Auteur | Message |
---|
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Lun 1 Oct 2012 - 23:15 | |
| Heu, perso je préfère les quelques conditions o_o Surtout qu'a coup de mod et div je suis sur que tu peut autant condenser ton code. |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Lun 1 Oct 2012 - 23:29 | |
| Mod / div ça fait des calcules supplémentaires et faut que ça se charge assez rapidement sinon c'est pas très intéressant (même si on gagne des heures de mappage quand même).
Là les maps même très grandes se chargent vites sans aucuns soucis. Et on a que 30 tuiles à faire après tu les étales en deux calques.
Apres je vais au plus cour et au moins ****** mais sinon oui on peut gagner quelques octets de disign mais pas sûr que ça valent le coup par rapport au temps de chargement des maps. Et ça reste un exemple pour monter comment on peut procéder (même si je l'utilise dans cet état là). |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Lun 1 Oct 2012 - 23:32 | |
| Ben soit tu fait un algo plus opti, et cpas bien dur, soit tu génère une nouvelle planche de tiles qui corresponde a ce que tu veux si c'est ça le problème. Mais faut pas que ce soit a l'utilisateur de le faire. |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Lun 1 Oct 2012 - 23:45 | |
| - Citation :
- tu génère une nouvelle planche de tiles
Yep mais ça ça se fait une seule fois à l’installation du jeu, ça reste un autre exemple que je mettrais surement en complément du coup. - Citation :
- tu fait un algo plus opti
Bha il est bien mon algo, tu es dans tout les cas obligé de regarder dans les 8 directions donc je trouve inutile de rajouter des conditions/calcules. |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Mar 2 Oct 2012 - 13:35 | |
| Bah le truc, c'est que la je trouve pas ça du tout intuitif, alors imagine un débutant qui veux utiliser ton gmk, il va bugger en voyant la planche de tiles x)
|
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Mar 2 Oct 2012 - 14:34 | |
| Yep, tu as raison, je vais faire une note explicative sur la conception de la planche de tuiles. Je ferais ça dès que je peut. Merci pour les retours sensei. |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Dim 4 Nov 2012 - 23:57 | |
| |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 14:38 | |
| Sympa, mais un cryptage xor n'est pas vraiment une sécurité, pour ceux qui se posent la question |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 15:07 | |
| Faut quand même avoir une grosse expérience pour le décrypter quand même, moi perso je pense pas réussir (jamais essayé), avec un cryptage xor je me sans quand même sécurisé. |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 18:15 | |
| Ben le truc, c'est qu'un xor t'empeche pas de modifier une sauvegarde.
Imagine ta sauvegarde fait 10bytes: 4b: argent 2b: vie max 2b: munitions 4b: durée de jeu
Le cryptage xor va juste changer l'écriture des données, mais quelque soit la clef, si je modifie le premier byte par exemple, le jeu chargeras tout de même la sauvegarde, et la valeur de l'argent seras modifiée. Imaginons que le premier byte soit celui de poids fort, il y a de forte chance qu'en mettant un truc au pif je me retrouve in game avec une énorme somme d'argent.
De plus en comparant des sauvegardes tu peut très vite trouver l'utilité de chaque octet, puis par la même occasion la clef.
Exemple de hack avec les données ci dessus: Je commence le jeu avec 1000 d'argent. Je sauvegarde, je regarde mon fichier. Les 4 premiers bytes sont: 7A 65 6F 8C , et on s'en fou des autres, le principe reste le même. Je relance le jeu, j'achète un objet qui vaux 250, mon argent est donc a 750. Je regarde a nouveau le fichier, les 4 premiers bytes sont: 7A 65 6E 8A Déjà n'importe quelle personne un minimum maline va capter qu'au moins les deux octets différents servent a coder l'argent. Changeons les donc par un truc au pif: 7A 65 12 34 Dans le jeu on auras alors 32 336 d'argent. Rien que la on vois que xor sert a rien, mis a part ne pas écrire en clair les variables dans le fichier, et encore ce n'est utile que pour les chaines de caractère.
Si maintenant nous souhaitons retrouver la clé, il suffit de regarder l'influence des modifications dans le jeu. Le plus simple, tout mettre a 0: 00 00 00 00 -> in game on auras 2053467236 d'argent. En hexadécimal cela vaux 7A 65 6C 64, soit respectivement 7A: z 65: e 6C: l 64: d
Les 4 premiers caractères de la clef sont donc zeld, ont peut même imaginer que la clef est zelda.
Bref, un xor n'est pas plus sécurisé qu'écrire les données en clair dans ta sauvegarde. Il ne seras utile que pour éventuellement cacher les chaines de caractères écrites dans la sauvegarde, et encore... |
|
| |
marty Utilisateur confirmé: Rang ***
Messages : 697 Projet Actuel : laby-ereinte !
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 18:53 | |
| ça me rappelle la sauvergarde de diablo 2 ce que tu dis,j'avais fait exactement ce que tu raconte et je suis vraiment nul en prog mais avec l’éditeur hexa et de la chance je me suis fait plaisir ! onilink fait nous des jeux pleeeez! (même un tout p'tit les graphs ,on s'en fout !) |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 19:01 | |
| Si j'avais le temps j'en ferais bien un mais bon ... j'ai a peine le temps de faire mes quelques petits trucs x)
Sinon ouai en général y aller au jugé dans une save pas bien protégés ça le fait :b C'est pour ça qu'en général, pour empêcher ça, on utilise une espèce de hash. Si le gars modifie une donnée on pourras indiquer que la sauvegarde est corrompue par exemple.
|
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 19:46 | |
| Et un cryptage XOR avec clef générée semi-aléatoirement, et des octets de vérification modulo, ça donnerait quoi ? _________________ Home is not a place, it's a feeling.
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 19:51 | |
| Plus efficace, mais toujours aussi inutile sur quelqu'un qui cherche un peu. Y a des années, alors que je connaissais ni xor ni les bytes de vérifications j'avais cassé une sauvegarde de jeu qui utilisait cette méthode. Par contre je doit avouer que ça m'a pris près de 30min, donc ça protège des 100% noobs. Mais bon en général un noob si c'est pas écrit en clair dans un ini ou un txt ça suffit a le démotiver donc bon x)
Le top pour les encryptions, c'est quand le byte x+1 dépend du byte x. Ça fait que si tu modifie un seul byte, il faut modifier tous les autres. De plus lorsque tu sauvegarde, même si une seule valeur est modifiée, une grande partie de la sauvegarde pourras être changée par la même occasion.
|
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 20:45 | |
| Suis daccord avec toi suis le procedé de pas à pas mais à mon avis tu as pas regardé tout les scripts. Voici le fichier généré: - Citation :
- RZ[Z[[[[[S[[[[[[[Z[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Z[[[[[[[[[[[[[[[[[[[[[[[\[[[[[[^-^X_^_X^^^Y_^[Z[[[[[[[[[[[[[[[[[[[[[[[X[[[[[[]Z]\]^[Z[[[[[[[[[[[[[[[[[[[[[[[][[[[[[]Z\Y]\]^].\_[Z[[[[[[[[[[[[[[[[[[[[[[[*[[[[[[]^\S\[]^\Y]R]^].]X]^[Z[[[[[[[[[[[[[[[[[[[[[[[][[[[[[].]R\]]^]Z\^[Z[[[[[[[[[[[[[[[[[[[[[[[X[[[[[[].]-]/[Z[[[[[[[[[[[[[[[[[[[[[[[_[[[[[[\X]^\S]^[Z[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*.\])Z)S_Z[[[[[[[[[Z[[[[[[[[[[[[[[[[[[[[[[[X[[[[[[\.XYXS[Z[[[[[[[[[[[[[[[[[[[[[[[][[[[[[^[]Z\^\]\Y]^[Z[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Z[[[[[[[[[[[[[[[[[[[[[[[X[[[[[[Y)X/XZ[Z[[[[[[[[[[[[[[[[[[[[[[[_[[[[[[_X]Z](\R[Z[[[[[[[[[[[[[[[[[[[[[[[/[[[[[[]_]Z].\XY[](]ZY[].]-\Y]/]^
Si tu arrive à choper une valeur là dedans avec la technique dite plus haut je t'envois un paquet de céréale par colis postal. De plus que si tu regarde dans le script saveFile et saveLoad je fous une clef de sécurité qui indique si la chaîne a était corrompu. Voir d’ailleurs si tu change trop de bits le jeux plantera automatiquement au chargement |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 21:21 | |
| Je veux mon paquet de céréales alors, car le procédé reste exactement le même.
La différence c'est que ds_map_write ne renvoie pas un array de bytes, mais une chaîne de caractère du style 7A656C6461 pour zelda. D'ou la chaîne chelou qu'on a dans le fichier sav, mais si tu essaye le technique énoncée ci dessus elle fonctionne toujours de la même manière.
Et ta protection est inutile, elle ne teste en aucun cas une espèce de hash de la save. |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 21:30 | |
| - Citation :
- si tu essaye le technique énoncée ci dessus elle fonctionne toujours de la même manière.
Perso j'y arrive pas dés que je touche à quelque chose le jeu ne charge plus et plante "an unexpected error occurred" et si tu touche à la clef qu'il faut pas (j'en ai mis qu'une mais tu peut mettre d'autres) ça renverra directe que les donné sont corrompus. Par-contre en te lisant je me dit que de mètre "game_id" en secure n'est pas top j'aurais du mettre un string_length ou les bits fort de la chaîne en valeur mais j'y avais pas pensé. |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 21:45 | |
| Car tu modifie des variables utilisées par la ds_map_read, pas des variables du jeu. Comme je l'ai dit avant de bidouiller les valeurs au pif il faut regarder les valeurs qui se modifient lorsqu'une variable du jeu change, comme l'argent par exemple. De plus étant donné que tu utilise un ds_map_read, y a carrément moyen d'insérer de nouvelles variables et tout ahah, ça c'est l'ouverture a des hacks de plus grande envergure Bref ce que je veux dire c'est qu'il faut comprendre que le xor c'est bien beau, et facile a implémenter, mais niveau protection c'est vraiment le niveau 0, c'est juste une substitution de bytes par d'autres. Tu enregistrerais ta map sans xor ce serais pas bien moins protégé (certes un peu plus clair au premier abord, et encore). Et en plus de ça ton cryptage xor est faux, il ne prend que le premier caractère de la clé pour crypter. Tu as oublié d'incrémenter le curseur p dans la boucle de ta fonction de cryptage. Vilain Caly, je veux mes céréales |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 22:17 | |
| Voilà, nouvelle version de posté. Script modifiés: saveCrypt saveFile saveLoad saveCrypt: ajout de l'incrementation :s saveFile: - Code:
-
var str, bit, count,i; str=ds_map_write(_SAVE); count[0]=0; count[1]=0; count[2]=0; //bit : int; for( i=0; i<string_length(str) ; i+=1 ){ bit= ord( string_char_at(str, i+1))&1; if( bit==0 ) count[0]= (count[0]+1) mod 256; if( bit==1 ) count[1]= (count[1]+1) mod 256; }
count[2]= count[1]+count[0]; saveSet('_SECURE', count[2]);
saveLoad: - Code:
-
if( !ds_map_exists(_SAVE, '_SECURE') ) return -8; var secure; secure=ds_map_find_value(_SAVE, "_SECURE"); ds_map_delete(_SAVE, '_SECURE');
var str, bit, count,i; str=ds_map_write(_SAVE); count[0]=0; count[1]=0; //bit : int; for( i=0; i<string_length(str) ; i+=1 ){ bit= ord( string_char_at(str, i+1))&1; if( bit==0 ) count[0]= (count[0]+1) mod 256; if( bit==1 ) count[1]= (count[1]+1) mod 256; }
if(secure!= count[1]+count[0]) return -8; - Citation :
- De plus étant donné que tu utilise un ds_map_read, y a carrément moyen d'insérer de nouvelles variables et tout ahah, ça c'est l'ouverture a des hacks de plus grande envergure
Réglé. - Citation :
- Et en plus de ça ton cryptage xor est faux, il ne prend que le premier caractère de la clé pour crypter.
Réglé. - Citation :
- Vilain Caly, je veux mes céréales
Envois moi ton adresse postal par MP et je m'engage à te les envoyer! Aller envois la suite tant que je suis chaud à modifier les sources |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Lun 5 Nov 2012 - 22:31 | |
| Ahah x)
Bon ben malheureusement la je suis crevé donc dodooo x) Mais bon a mon avis ces quelques modifications devraient rendre les sauvegardes un peu moins facile d'accès au premier venu :b
Pour ce qui est de la sécurisation complète des sauvegarde, je pense que je ferrais un petit challenge d'ici quelques jours, histoire de montrer qu'il y a facilement et rapidement pas mal de trucs bien plus efficaces qu'avec xor (et surtout qu' xor, quand on réfléchis un peu, ça sert presque a rien).
Sur ce bonne soirée :) |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Sam 14 Fév 2015 - 12:13 | |
| Ajout d'un système de temps par FPS. |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Sam 14 Fév 2015 - 12:40 | |
| Tu t'es un peu pris la tête je trouve, avec un timestamp tu peux faire la même chose avec quelques lignes de code :p Pis surtout ça se représente dans une seule variable, donc sous GM c'est plutôt cool.
|
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Sam 14 Fév 2015 - 13:18 | |
| Plop, bah soit c'est moi qui est pas trouvé dans la doc ou alors GM est assez mal foutus sur ça. Moi niveau fonctions qui gèrent les timestamp jai : date_create_time(hour, minute, second) Crée une valeur date-heure correspondant à l'heure indiquée. Et les GET : date_get_second(date) Retourne la seconde correspondant à la date. Mais je ne trouve pas de SET donc faut quant même tout calculer à la main (sauf si j'ai loupé une fonction). Si j'ai rien louper à partir de mon exemple on peut assembler les deux pour plus de puissance : - Code:
-
timeManager(TIME_MANAGER);
date = date_create_time( timeManager(TIME_GET_HOUR), timeManager(TIME_GET_MINUTE), timeManager(TIME_GET_SECOND) );
Et les timestamp sous GM ne sont pas calculés celons les FPS je crois bien (je me plante peut être) |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Dim 15 Fév 2015 - 17:16 | |
| En fait je parlais juste d'utiliser une unique et simple variable pour le 'stockage' du temps, comme les timestamp. Comme ça déjà c'est plus simple a manipuler pour toi, et éventuellement par l'user s'il veux pas être obligé de passer par des fonctions de modifications... Normalement y a juste a utiliser quelques operateurs a la con genre mod ou div pour faire les getters de secondes/heures...
|
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Dim 15 Fév 2015 - 18:07 | |
| Ah oui ok j'avais pas compris comme ça. GM a pas de soucis sur des grosses variables? |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Les Exemples de Caly Dim 15 Fév 2015 - 18:10 | |
| Il gère des flottants 64 bits donc j'imagine que y a de la marge. |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Dim 15 Fév 2015 - 18:29 | |
| |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Lun 27 Mar 2017 - 14:47 | |
| Ajout d'un "menu anneau animé". |
|
| |
arthuro Utilisateur confirmé: Rang ****
Messages : 1482 Localisation : Paris Projet Actuel : Diagon https://arthursonzogni.com/Diagon
| Sujet: Re: Les Exemples de Caly Lun 27 Mar 2017 - 22:53 | |
| - Caly a écrit:
- Ajout d'un "menu anneau animé".
Super ; |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Les Exemples de Caly Ven 31 Mar 2017 - 2:02 | |
| Ajout d'une "Message Box" à la RPG. |
|
| |
Contenu sponsorisé
| Sujet: Re: Les Exemples de Caly | |
| |
|
| |
| Les Exemples de Caly | |
|