La notion d'aleatoire sous LOD

M

Myrdinn

Invité
En plus pour se deplacer il utilise des nombres aleatoires qui correspondaient peut etre au drop d'un Windforce les salopi:%#$£ :lol:
 
P

Phoenix

Invité
si j arrive a en enfermé un dans un piege et que je lui decoup ses intestins j trouverai peut etre un vamp1.08 qui sait :evil:

mais fo voir aussi de quoi ils sont capable: seul une grenade sacré peut les tuer
 
R

Rhaa

Invité
Trop drole à imaginer

Y a pas un truc pour tuer tous les lapins (après les vaches, j'aimerais bien changer de boucherie)

Comme ça tous les nombres aléatoires seraient a MOI, rien qu'à MOI. Enfin un plus grand nombre ... mais ce n'est que le début, car ils seront tous à MOI

Bon je ferais ptete bien de prendre une douche froide moi :mdr25: (tient y a des smileys que j'avais pas vu :bisou: et :tusors: )
 
M

Myrdinn

Invité
Juste une petite remarque mais je pense que je vais bientot completement réecrire l'article.
Je ne vous donnerais pas le code source tant que je n'aurais pas compris completement son fonctionnement.

La fonction aléatoire est pour le patch 1.09b est la fonction qui commence à l'offset 000C4800. LE call se fait avec passage de 2 paramètres :
- Le registre EBX qui contient la valeur max -1
Exemple si EBX=100 alors le nombre final sera un entier compris entre 0 et 99
- Le registre ECX qui contient le Seed de l'unité.
Et oui apparemment chaque unité à sa propre seed.

Le resultat est un entier passé dans le registre EAX.
 
T

tiissa

Invité
Euh...l'unité c'est le truc qui bouge c'est ça ? Donc chaque monstre, lapin, perso, NPC, coffre, ... a sa propre seed !?

Donc les seeds des monstres ont des durées de vie assez courte...donc il peut être intéressant de regarder leur génération.

Au fait, les monstres jouent à 25Hz aussi non ? Donc un monstre c'est de l'ordre du milier de générations à partir de la seed c'est ça ?
 
M

Myrdinn

Invité
Oui je reviendrais en détails sur cela plus tard
Quelques exemples d'unités. Le joueur, le mercenaire, les monstres, les objets ...
Elles ont toutes la meme structure. Elles sont stoqué en mémoire sous forme de suite contigue de DWORD de 4 bytes.
Le premier DWORD est pour le type d'unit
Prenons maintenant le cas d'un joueur
Le premier DWORD est 0 pour joueur (1=monster;2=coffre,rack...;3=missile;4=item;5=tile(voir travail de Paul sur les maps ...)
Le deuxième DWORD (à la position +4) indique la class
0=Amazone
1=Sorceress
2=Necromancer
3=Paladin
...
Le troisieme(En position +8)
Un GUID (Identifiant unique anti Duppe)evidemment sur un joueur
c'est pas très utile
Le quatrième (+C) est l'etat
Mort,stun,....
...
Celui en (+2C) c'est le seed aléatoire qui est remplacé par une nouvelle valeur à chaque appel à la routine 000C4800.

Voila je ne tiens pas pour l'instant à rentrer trop dans les détails ce n'est pas le but de ce post
 
M

marcus350

Invité
YAAAAAAAA!!!
myrdinn powAAAAAAA!!
:p

ben ,sans calculs,g toujours eu ce genre de conclusion que tu explique :les drops sont le fruit du hasard(hormis mf/zone de jeu/monstre tué(j oublie peut etre qq trucs sur le cps))

ca me rappelle un gars que g vu y a un mois sur fra-1,coeur enflammé,qui nous a fais un bo laius sur le fait qu il joué depuis d1 ou ché pa quoi(ca,ok),et qui nous explique que si on veux des bons drops fo faire comme au bon vieux tps:il disait qu avant il faisait des cow lvl avec 7 lvls95,avec que du stuff pourri sur eux,que c etatait un seul gars qui nettoyais tt le lvl,pi qu il whisper les autres pour tuer le roi,pi qui fallait le tuer le + rapidemanet possible,et alors la y avais tt les meilleurs trucs qui tombaient:lol:

je lui ai balancé quelque expliquations des drops trouvé sur diabloii.net en lui disant que moi je preferais le concret et croire que les programmeurs sont assez intelligents pour rendre les drops hasardeux et que c plutot son esprit qui fais des liens qui n explique pas(comme tu/qq1 disais ,c dur pour l esprit humain d apprehender le hasard et les choses qu il ignore)

ds le meme genre un pote croyais dur comme fer que s il dépassé le lvl75 avec sa sorc il aurais que des mauvais drops...:lol:

y en a des pages et des pages des trucs comme ca^^

la prochaine fois
je leur balancerais ta page histoire de bien les locker avec slow+knockback contre le mur:p

ca fais du bien de voir des personne qui essaie de se servir de leur logique comme vous les gars


ps:d un autre coté,je me demande s ils seraient pas heureux en continuant a croire en leurs mythes


:gratz: et encouragement pour tt ces tests et calculs
 
U

ulmo

Invité
Dans l'idée, l'ordinateur devrait être le roi du déterminisme : une action doit toujours donner le même résultat. Typiquement, quand je double-clique sur l'icone D2, le jeu se lance. La complexité des ordinateurs ayant très fortement augmenté, ce déterminisme est de moins en moins vrai : parfois au lieu de D2 j'obtiens un écran bleu... Néanmoins on a tendance à penser que c'est du à un bug de programmation quelque part (et en général on accuse Windows), c'est à dire qu'il y a une cause cachée mais qui est toujours déterministe.
Maintenant arrivent des gens qui ont besoin de hasard en informatique (pas seulement des joueurs. Des scientifiques/ingénieurs par exemple. On peut vouloir calculer des intégrales avec des tirages aléatoires). Notez donc que a priori, on a deux notions incompatibles.

Précisons vite fait qu'on peut ramener tout l'aléa informatique à des nombres aléatoires compris entre 0 et 1. On pourra ainsi générer des entiers entre 1 et N, décider aléatoirement du comportement des monstres...

Pour générer des nombres aléatoires, on peut se servir d'une source exterieure de hasard, comme l'horloge de D1, ou on peut simuler le hasard. On a alors quelque chose de déterministe (on parle de "pseudo aléatoire"), mais on souhaite qu'il n'y ait pas de différence visible avec un "véritable" hasard (parce que la hasard dans la vie courante, c'est un vrai sujet de débat. Imaginez ce que vous voulez, ce n'est pas le sujet du jour).
La question est "quel comportement est ce que j'attend de mes nombres aléatoires ?". Pour le jeu, les critères ne sont pas très restrictifs : on veut que tous les tirages soient bien répartis entre 0 et 1, et que les tirages successifs semblent indépendant (ou même que les groupes de tirages soient indépendants).
La méthode classique graine+fonction bien choisie permet de faire tout cela (en passant, ce principe de graine(seed) est un gros avantage pour le débugage). Il reste a bien choisir la fonction passant d'un tirage au suivant. Beaucoup de gens y ont travaillé, y compris des gens biens. Il en ressort qu'une méthode très facile et très efficace est la suivant :
*On va générer des entiers compris entre 0 et 2^n - 1, qui donnent des réels en les divisant par 2^n.
*Mettre ce que vous pouvez comme graine (nombre de millisecondes depuis la nouvelle lune par exemple) en début de session.
*On passe d'un nombre au suivant par la formule :
A(suivant) = A(précédant) * a + b [mod 2^n]
a et b étant correctement fixés (b=0 est très mauvais, b = 1 marche très bien). Différents livres/articles donnent des bonnes valeurs pour a et b (j'ai ca quelque part si ca vous intéresse).
*en fait les derniers bits ne sont pas vraiment aléatoires. Donc pour obtenir un entier entre 1 et N, il ne faut pas faire A[mod N], mais ceil(A*N/2^n)+1.

Comme 2^n est beaucoup plus grand que les nombres intervenant dans les probas de D2, le comportement est bien indépendant d'un tirage à l'autre : si vous savez que vous avez obtenu la bonne chance sur 100 000, il y a en fait 42900 valeurs possibles pour le tirage, ce qui laisse toute la latitude possible pour les suite des tirages.

C'est d'ailleurs ainsi que marche le générateur aléatoire du C/C++. Les valeurs de a, b et n sont quelque part dans la documentation.
Le choix d'une telle méthode pour D2 serait donc assez logique. Cela dit, cette fonction particulière ou une autre, ça ne change pas grand chose. Ce qui compte c'est que :
+Comme on se sert beaucoup du hasard, deux parties avec même graine vont très vite se différencier.
+On ne peut pas prédire la suite des évènements. On bon drop par le premier monstre venu n'est ni un bon ni un mauvais présage.


Bref, tout ca pour dire que (sous réserve que les nombres aléatoires de D2 soient bien générés comme indiqué) :
-les séries de bons drops ne sont effectivement que de la chance. Il n'y a pas de méthode particulière.
-la facon exacte dont sont générés les nombres aléatoire n'a pas d'importance (du moment que c'est bien fait)

(J'espère que ce message fait avancer la discussion malgré les répétitions...)
 
G

groumphff

Invité
Provient du message de Ulmo
(J'espère que ce message fait avancer la discussion malgré les répétitions...)


Euh...En répondant avec 1 an et 6 mois de retard (Chuis tjrs à la bourre mais là,chapeau bas) ?
 
I

icebird

Invité
en plus c'est compliqué son histoire :D

enfin faut pas se plaindre, ca up le topic ;)
 
J

Joel

Invité
Provient du message de Myrdinn
Oui je reviendrais en détails sur cela plus tard
Quelques exemples d'unités. Le joueur, le mercenaire, les monstres, les objets ...
Elles ont toutes la meme structure. Elles sont stoqué en mémoire sous forme de suite contigue de DWORD de 4 bytes.
Le premier DWORD est pour le type d'unit
Prenons maintenant le cas d'un joueur
Le premier DWORD est 0 pour joueur (1=monster;2=coffre,rack...;3=missile;4=item;5=tile(voir travail de Paul sur les maps ...)
Le deuxième DWORD (à la position +4) indique la class
0=Amazone
1=Sorceress
2=Necromancer
3=Paladin
...
Le troisieme(En position +8)
Un GUID (Identifiant unique anti Duppe)evidemment sur un joueur
c'est pas très utile
Le quatrième (+C) est l'etat
Mort,stun,....
...
Celui en (+2C) c'est le seed aléatoire qui est remplacé par une nouvelle valeur à chaque appel à la routine 000C4800.

Voila je ne tiens pas pour l'instant à rentrer trop dans les détails ce n'est pas le but de ce post

Les tiles sont aussi des unités ^^
 
M

Myrdinn

Invité
Ce post est vieux et obsolète :lol:

Cependant je peux updater les infos si vous en avez besoin.

Oui Joel Les Objets de type 5 sont des Tiles, ca pose un problème particulier ???
 
U

ulmo

Invité
Provient du message de Groumphff
Euh...En répondant avec 1 an et 6 mois de retard (Chuis tjrs à la bourre mais là,chapeau bas) ?

Ah ben moi je debarque, je lis le premier sujet du premier forum et vas-y que je te raconte ce qui me passe par la tête :)
 
J

Joel

Invité
Provient du message de Myrdinn
Ce post est vieux et obsolète :lol:

Cependant je peux updater les infos si vous en avez besoin.

Oui Joel Les Objets de type 5 sont des Tiles, ca pose un problème particulier ???

nono, au contraire ... j'avais bidouillé une skill en 1.09 qui transformer les tiles autour de toi en tiles lava.
Snon, il sont aussi de l'xp, des hp etc .. mais ca sert à rien lol
 
G

groumphff

Invité
Provient du message de Ulmo
Ah ben moi je debarque, je lis le premier sujet du premier forum et vas-y que je te raconte ce qui me passe par la tête :)

Ya pas de mal, je ne mors pas :angel:

Mais il parait qu'il faut vérifier la date des posts avant de répondre ;)

Provient du message de Demodius_TDC
Euh café pour tout le monde?

Bien serré avec 1/2 sucre stp, merci.
 
M

Myrdinn

Invité
J'ai des très vieux posts toujours d'actualité, je suis toujours content d'avoir un UP déguisé ou de continuer la discussion ;)
 
M

Myrdinn

Invité
J'ai mis le post à jour avec les dernières infos.

J'ai encore beaucoup de chose à dire sur l'aléatoire mais le temps me manque actuellement. Ce post va probablement encore evolué dans les semaines à venir

A suivre ...
 
Haut