Tracer les Dlls -- La structure du jeu

M

Myrdinn

Invité
Ce premier topic a pour but d'expliquer la structure du jeu. Il sera complété au fur et à mesure lorsque vous saurez trouver vous même les informations.

Les explications apportées ici vous paraitrons peut être obscures, mais dès que le deuxième topic sera terminé vous
aurez un eclairsissement sur le fonctionnement.

Diablo II : Un jeu orienté objets
Dans diabloII tous est géré sous forme d'objet (LE personnage, les monstres, les éléments du décors, le sol, les dégats ...).Afin d'éviter de froisser les informaticien on utilisera par la suite le terme UNIT (ou unité) au lieu d'objet

Une UNIT est un ensemble de données contenant la description (=champs) et les valeurs spécifiques de cette UNIT suivant un modèle.

Pour comprendre ce que j'entends par objet je vais donner 3 exemples :

Exemple de tous les jours
Une fiche de renseignement universitaire. Il existe plusieurs type d'unité (Professeur,étudiant,assistant de TP ...)
Pour un type d'unité, elle contient toujours les mêmes champs de renseignement.
Généralement les fiches des différentes unités restent construites sur des modèle semblables. (Les professeurs ont un prénom comme les étudiants, une date de naissance ...)

Exemple pour l'UNIT ETUDIANT
NOM
PRENOM
Numéro de sécurité sociale
Date de naissance ...

Exemple Langage PASCAL

En pascal un objet s'appellerait un RECORD
La même chose en pascal donnerait

Etudiant=Record

Nom: String(64);
Prenom: string(64);
NuméroSS: intéger;
...

End;

En C un objet s'appellerait une Structure, mais je pense que ca suffit pour les exemples.
Revenons dans le cas de DiabloII.

Exemple UNIT DiabloII
Chaque UNIT est physiquement une zone mémoire allouée dynamiquement (Donc à chaque partie votre objet joueur est dans une zone différente, sinon se serait trop facile)

Dans cette zone mémoire
Chaque champ est un double Word (32 bits- 4bytes/octets) même si l'information(=La valeur dans ma nomencalture) tient dans 1 bit.

Bref en hexadécimal on compte en bytes, chaque champ est séparé de +04
LE champ 0 est en 0
Le champ 1 est en +04 (Par rapport à l'adresse mémoire de l'objet)
le champ 2 est en +08
Le champ 3 est en +0c
...
Les valeurs sont directes (Exemple ILVL,Numéro de l'acte...) ou sont elles mêmes des structure au niveau bit (voir premier champ
de l'exemple) avec pour chaque bit 0=non et 1=oui


Maintenant l'exemple
L'UNIT Dégat

+00 Flags
..........1) Annule les dégats physiques 0=non 1=oui (Pareil pour toute la suite)
..........2) Annule tous les dégats
..........4) Annule le vol de vie
..........8) Annule le vol de mana
.........10) Annule le vol de stamina
.........20) ????
.........40) Berserk Actif
Bref si la valeur est 5 les dégats physiques et vol de vie sont annulés dans la procédure de combat. Autre remarque seul
le premier byte est utilisé sur les 4

+04 REsultat du coup
..........1) Touché
..........2) Dégats > Point de vie de la cible
..........4) Attaque "ne peut etre interrompue" Concentration par exemple
..........8) Knockback
.........10) Block (Annule 1)
.........20) Coup critique
.........40) Thorn
.........80) Dodge (Annule 1)
........100) Avoid (Annule 1)
........200) Evade (Annule 1)
........400) Iron Maiden
........800) Life Tap
.......1000) Annule attaque ne peut être interrompue (Annule 4)
.......2000) Coup critique
.......4000) Graphisme associé au coup reçu

+08 Dégats Physiques
+0c +Dégats physiques %
+10 Dégats de feu
+14 Dégat de brulure
+18 Durée de brulure
+1c Dégats de Foudre
+20 Dégats Magiques
+24 Dégats de Froid
+28 Dégats de poison
+2c Durée du poison
+30 Durée de chill
+34 Durée de Freeze
+38 Vol de vie
+3c Vol de mana
+40 Vol de stamina
+44 Durée de Stun
+48 Dégats Absorbés
+4c Dégats Totaux


Ne vous inquiétez si vous n'arrivez pas à tout suivre. Des exemples concrets vont suivre, plus abordables que cette liste.
Vous apprendrez comment contruire vous même cette liste dans le troisième topic et vous verrez directement ces UNIT en mémoire dans le quatrième (Ainsi que votre objet joueur).
 
M

Myrdinn

Invité
Les outils de gestion des UNIT -- Les DLLS
Je ne ferais pas pour l'instant de cours sur la structure complète d'une Dlls n'étant pas spécialiste de la question.

DiabloII est un jeu Client/serveur aussi bien en solo que sur battlenet.
Bon d'abord les Dlls qui nous intérressent:

D2Client.dll
C'est la partie Cliente de DiabloII. Elle gère l'affichage (Grace a l'interraction avec D2gfx.dll ...) , la souris, le clavier...
Cette Dll est la spécialité des "Mauvais hackers" car elle est active en fermé, c'est pourquoi je ne l'aborderais pas du tout ou
très peu.

D2Game.dll
C'est la partie Serveur. c'est elle qui gère la création/disparition des objets, les formules, les interractions entre les UNITs
(Combat, drop ,expérience ...) Sur battlenet cette partie est active sur le serveur, en solo sur votre poste. C'est la spécailité
des "gentils hackeurs" les créateur de mod.
C'est évidemment celle la que l'on regardera majoritairement.

D2Common.dll
C'est la Dll qui extrait les informations soit directement des MPQs (enfin des fichiers issus des MPQs chargés en mémoire) soit
des UNIts. Un exemple Quel est le ILVL de cet objet, Quel monstre à l'ID 180 ...

Cette division est un peu simpliste mais vous verrez concretement par la suite des fonctions de ces Dlls.

Dll = Bibilothèque de fonction
Revenons brièvement à la structure des Dlls. LEs dlls sont des Bibliothèque non pas de livre mais de fonction (On pourrait
simplifier en mini programme)

Quelques exemples vallent mieux qu'un mauvais discours.

D2Game.dll la première fonction que l'on va étudier est la fonction qui calcule les dégats physiques.
D2common.dll Il existe une fonction qui détermine un nombre aléatoire. LE MLVL d'un monstre, l'arme utilisée, ...

Chaque Fonction utilise des paramètres en entrée et donne un résultat en sortie. Dans le cas de la fonction aléatoire il faut
indiquer à la dll Le nombre maximum et la Seed de l'objet en entrée et en sortie elle donne un nombre entre 0 et le nombre maximum

Table D'importation/d'exportation
Table d'exportation :LEs dlls autorisent d'autre Dll/executable a utiliser leur fonction. LEs fonctions accessibles depuis un
autre programme sont listées dans la table d'exportation soit par un nom/soit par un numéro. Pas de chance dans le cas de
DiabloII c'est par numéro.
Table d'importation : LEs Dlls ne sont autorisés a accéder qu'aux fonctions des autres Dlls listées dans leur table
d'exportation.

Ca n'a a priori pas trop d'importance pour diabloII, sauf que pour le D2Common.dll on nommera les fonctions par leur Numéro et
certaines sont très importantes à retenir comme on le verra par la suite.


La SUITE
 
K

kaizel

Invité
ohhhhh mais je l'aivais pas vu celui la merci
myrdinn a encore frappé :D
 
C

ch'ti

Invité
coucou Myrdinn, et merci :)

jusqu'ici, tout va bien ... enfin, presque :
dans le premier post, dans la description de l'objet dégat, à quoi correspondent les nombres 1) 2) 4) 8) 10) 20) .... ?
 
H

hohorga

Invité
Intéressant topic Myrdinn.

Pour le premier post, est-ce à dire que le jeu est :
1) programmé en POO (programmation orientée objet (C++ p.ex)), les "objets" ayant leur code et variables encapsulés et la notion d'héritage étant utilisée (un objet "arme" qui a des dégats p.ex, puis un objet "fils" de l'objet arme qui s'appelle "arc" qui a besoin de flèches, puis un objet fils de l'arc qui s'appel "eagle" et qui a telle et telle caractéristique...). Hum mais avec la notion de MOD j'imagine que un objet tel qu'eagle ne doit pas être codé en dur.... "Arc" peut être mais pas "eagle"...
2) ou juste gère t-il ses objets via des structures ?
 
M

Myrdinn

Invité
Ce sont les valeurs possibles.
Petites explication après citation de mon texte :D
Les valeurs sont directes (Exemple ILVL,Numéro de l'acte...) ou sont elles mêmes des structure au niveau bit (voir premier champ
de l'exemple) avec pour chaque bit 0=non et 1=oui

LEs valeurs directes
LE double word contient directement la valeur. C'est le cas pour les dégat de feu par exemple. LA valeur en +10 = dégat de feu que tu vas faire avant application des resistances ...

LEs structures
Pour optimiser la place. Le double word contient une structure au lieu d'une seule valeur.

+00 Flags
..........1) Annule les dégats physiques 0=non 1=oui (Pareil pour toute la suite)
..........2) Annule tous les dégats
..........4) Annule le vol de vie
..........8) Annule le vol de mana
.........10) Annule le vol de stamina
.........20) ????
.........40) Berserk Actif

Aurait put etre remplacé par
+00 Annaulation des dégats Physuques oui=1 non=0
+04 Annulation des dégats
+08 Annulation du vol de vie
...
Cependant a chaque fois pour contenir une information binaire oui=1 non=0 on sacrifierait un DoubleWord en mémoire.


Bref revenons a cette structure et regardons au niveau bit
0000001 équivaut à 1 équivaut à annulation des dégats
0000010 équivaut à 2 ...
0000100 equivaut à 4 equivaut a annulation du viol de vie
...
0000101 equivaut a annulation des dégat et vol de vie
...
dans un seul bit tu compactes jusqu'à 8 informations binaires 0 ou 1

Si tu prends le double word
00000000 00000000 00000000 00010000 s'écrit 10 en hexa
00000000 00000000 00000010 00000000 s'écrit 200 en héxa
...

Voila pour tes valeurs 1,2,4,8,10,20,40,.. Ce sont les valeurs en octals possible pour ce champs et leur signification

EDIT suite remarque de ch'ti
 
M

Myrdinn

Invité
Provient du message de hohorga
Intéressant topic Myrdinn.

Pour le premier post, est-ce à dire que le jeu est :
1) programmé en POO (programmation orientée objet (C++ p.ex)), les "objets" ayant leur code et variables encapsulés et la notion d'héritage étant utilisée (un objet "arme" qui a des dégats p.ex, puis un objet "fils" de l'objet arme qui s'appelle "arc" qui a besoin de flèches, puis un objet fils de l'arc qui s'appel "eagle" et qui a telle et telle caractéristique...). Hum mais avec la notion de MOD j'imagine que un objet tel qu'eagle ne doit pas être codé en dur.... "Arc" peut être mais pas "eagle"...
2) ou juste gère t-il ses objets via des structures ?

Ou principalement en C++,C et assembleur pour quelques parties.
JE suis assez faible en POO. Il n'y a pas d'héritage au sens ou tu le présente en exemple.

Je ne voulais pas aborder les pointeurs pour l'instant mais un objet peut contenir d'autres objets par le biais de pointeurs. L'objet joueur a un lien sur les objet Inventaire et objet Compétence par contre je suis incapable de dire s'il s'agit d'une filiation dans le sens POO du terme car j'ai appris tous seul et je connais très peu la nomenclature :D

Un arc est un objet. C'est une fonction de la D2Game.dll qui lui fait consommer des flèches qui sont également un objet indépendant du premier. Il n'y pas de filiation a part leur appartenance à l'objet inventaire lié à l'objet joueur
 
C

ch'ti

Invité
je crois avoir compris :)
en fait, les 1, 2, ..., 10, 20 ... sont en notation hexadecimale
du coup, je comprends mieux ;)
quand tu dis :

"dans un seul bit tu compactes jusqu'à 8 informations binaires 0 ou 1 "

tu veux dire byte ou octet, et pas bit ?

et sinon, octals représente quoi ?

je ne suis plus à partir de :



Si tu prends le double word
00000000 00000000 00000001 0000000 s'écrit 10 en octals
00000000 00000000 00000010 0000000 s'écrit 20


par exemple,

00000000 00000000 00000000 00010000 ne s'ecrirait pas également 10 ?
00000000 00000000 00000000 00100000 ne s'écrirait pas également 20 ?

je crois que c'est bien le terme octal qui me pose problème ici ;)
 
M

Myrdinn

Invité
Provient du message de ch'ti
je crois avoir compris :)
en fait, les 1, 2, ..., 10, 20 ... sont en notation hexadecimale
du coup, je comprends mieux ;)
quand tu dis :

"dans un seul bit tu compactes jusqu'à 8 informations binaires 0 ou 1 "

tu veux dire byte ou octet, et pas bit ?
Oups désolé effectivement Byte ou octet = 8 bits

et sinon, octals représente quoi ?

je ne suis plus à partir de :

JE crois que c'est bien le terme octal qui me pose problème ici ;)
Décidemment je fatigue c'est de l'hexa et pas de l'octal et en plus il manquerait un zéro :D Il est tant que je rentre chez moi je crois :lol:
Hum en hexa 00000001 00000000 s'écrit 100 et pas 10
Il faut lire 000000000 00010000 qui s'écrit bien 10 j'editerais en conséquence dans ma troisième réponse :D
Désolé de t'avoir embrouillé
 
W

wakestorm

Invité
Je promé que je me mets à lire et à comprendre ça dès que j'ai le temps, parce qu'il en faut :p
 
B

BoulaTheBoula

Invité
:clap: myrdinn comme d hab c du bon taff j attend la suite :)

mais je pense que ceux qui ont jamais f d info vont etre decouragé rien qu avoir que c de l hexa :p


j ai deja utiliser le packet sniffer d un certain "utilitaire" dont je nommerais pas le nom parceque il est souvant mal pris :D

j ai pu voir que chaque information que ce soit de mouvement ou que soit un item

les informations commence par un bit qui indique ce que represente l action (bah moi j ai regader en faite pour jeter de l or par terre par packets de 1 histoire de faire des ptit dessins :p )
suivit de plusieurs bit qui indiquaient dans mon cas le montant d or que je jettai et puis mon numero de client sur la partie ( si je me rappel bien si tu etait le createur de la partie c etait 01 et si tu etait le deuxieme 02 et ainsi de suite )

donc si j ai bien capter ce qui ce trouve dans les dlls c justement le lien entre ces bits et leur correspondance ? ( donc tjrs dans mon exemple le bit qui correspondait au drop d or etait 50 ) et donc ce que le dlls dis c que 50 = drop or


est ce que j ai bien compris Mr Le Professeur ? :p


ps : mais voyons c le dll client qui ai le plus interressent moi je ve qu on l etudit :evil:
 
T

tiissa

Invité
Tout d'abord, bravo et merci pour ce fil. :)

Ensuite quelques remarques (bah vi sinon c'est trop facile ;)).
Pour ne pas embrouiller les choses et froisser les informaticiens, je pense qu'il serait plus approprié de se limiter au terme "enregistrement" (ou structure ou record ou ...) plutôt que d'employer le terme objet (qui désigne un formalisme plus élaboré comme l'a rappelé hohorga). ;)

Aussi si tu penses que l'hexa peut rebuter les lecteurs (et c'est possible ;)), tu peux utiliser des symboles à la place des noms (et le faire franchement). Par exemple, tu expliques brièvement que tu as envie de représenter un ensemble de valeur booléennes, que pour celà il faut un bit pour chacune dans un champs de bits. Ensuite tu n'utilises plus qu'un libellé "compréhensible" : PAS_VOL_VIE, PAS_VOL_VIE+PAS_VOL_MANA, etc...
C'est plus long mais ça requiert peut-être moins d'efforts pour comprendre ce que ça veut dire surtout que ce n'est pas strictement nécessaire avant de rentrer effectivement dans le code (et à ce moment là, en manipulant ce sera peut-être plus facile ;)).

Je pense aussi qu'il serait bon de rappeler quelques bases sur l'architecture client/serveur car même si on sent bien ce que c'est, il est toujours intéressant d'en connaitre les détails et les limites. :)

Enfin, il me semble que d'un point de vue de la présentation, il aurait été judicieux de garder et d'éclaircir la structure du premier post, à savoir d'abord une introduction à certains concepts informatiques puis ensuite en quoi ils nous intéressent dans le jeu (typiquement, tu écris la deuxième partie puis tu définis ce que tu y utilises dans la première)

Ce ne sont pas des remarques très graves, je donne juste quelques conseils quant à une éventuelle amélioration. S'ils semblent pointilleux, c'est peut-être parce qu'il n'y a pas grand chose d'autre à redire. :)
La critique est facile mais... ;)
Encore merci d'avoir fait cet effort...et de continuer. ;)


@Boula : dans les dlls tu trouves basiquement des fonctions. Certaines de ces fonctions sont (vraissemblablement) attachées au protocole liant le client et le serveur mais le lien entre le paquet que tu observes et ce à quoi il correspond est défini en amont par le programmeur.
Ensuite, à l'aide de ces définitions, il écrit ses fonctions pour faire effectivement correspondre à un lachage d'or une requête du client vers le serveur signifiant ce largage, pour mettre à jour l'état du monde (qui doit être retransmis au client pour affichage).
Dans les dlls on a donc directement l'action à entreprendre à la réception d'un certain "tag" ( 50 dans ton exemple).
La correspondance, c'est à nous de la reconstruire en comprenant ce que font les fonctions (sauf si les développeurs sont gentils...).
Enfin je dis ça, mais c'est peut-être légèrement différent dans didi. ;)
 
D

Dreddy

Invité
oulah, j'ai failli rater le cours moi :D
bon, j'imprime tout ça, je potasse, et je poserai mes questions plus tard s'il y a lieu..

en tous cas, merci Myrdinn ;)
a+
Dreddy
 
P

Paul Siramy

Invité
Bon allez, quelques explications de ma part. J'utilise assez souvent les mots anglais, désolé.

On peut travailler dans la mémoire d'un ordinateur au niveau des bits, des octets (bytes), des mots (words), des double-mots (dwords). Je n'aborderais pas d'autre joyeuseté genre nombre à virgule flottante (float), à virgule fixe, ou autre DCB (Décimal Codé Binaire).

Un byte est composé de 8 bits.
Un word est composé de 2 octets, donc 16 bits (on sert pas souvent)
Un dword est composé de 2 words, donc de 2 bytes, donc 32 bits.

Les plages de valeurs sont :
bit = 0 à 1
byte = 0 à 255
word = 0 à 65535
dword = 0 à 4294967295

Ces plages sont justes si on travaille avec une aritmétique non signé (sans signe, dont tous les nombres sont positifs). Si on veut réserver un 1 bit pour indiquer le signe du nombre, les plages de valeurs deviennent :

byte = -128 à 127
word = -32768 à 32767
dword = -2147483648 à 2147483647

Voici les chiffres utilisés dans :
* les nombres binaires (base 2) : 0 1
* les nombres décimaux (base 10) : 0 1 2 3 4 5 6 7 8 9
* les nombres héxadécimaux (base 16) : 0 1 2 3 4 5 6 7 8 9 A B C D E F


Maintenant, un outil indispensable : la calculatrice de windows ! Allez dans Menu démarrer / Programmes / Accessoires / Calculatrice. Allez dans le menu Affichage est choisissez l'affichage scientifique. Avec ça vous pouvez utiliser des nombres binaire / décimal / héxadécimal. Les nombres Octals, on utilise pas, jamais, oubliez-les.

Vous lisez dans un post le nombre 101 ... première chose à savoir, est-ce un nombre binaire, décimal ou héxadécimal ? Il faut parfois être devin si l'auteur du post utilise sa notation à lui et ne précise pas. Dans notre cas (101), pas facile de deviner. A priori ça peut être l'un des 3 types de nombres. Si vous lisez par contre 143, vous êtes sur que ce ne n'est pas du binaire, mais est-ce du décimal ou de l'héxadécimal ? Enfin, si vous lisez 1A6 vous être sur que c'est un nombre héxadécimal.

En général, quand on écrit un nombre décimal, on l'écrit comme d'habitude (genre 132). Quand on écrit un nombre binaire, généralement on met des zéros devant, de façon à former 1 groupe de 8 chiffres, genre 00010111. Pareil pour de l'héxa : 0F24. Mais c'est pas toujours suffisant, et en plus ça dépend de l'auteur du post. Personellement, pour écrire un nombre héxadécimal, j'utilise pratiquement tout le temps la notation utilisée en langage C, qui fait précéder le nombre de "0x", genre 0x0F24, comme ça ne se pose pas de questions. D'autre programmeurs utilisent la notation assembleur, qui, elle, fait suivre le nombre héxa d'un "h" genre 0F24h. Si vous êtes perdus, sachez que même entre programmeur des fois il y a de quoi se bouffer les doigts, donc dite vous bien que vous n'êtes pas nul, si vous vous posez la question, c'est que c'est l'auteur du post qui aurait dut préciser en quelle base était son nombre.

Transformons le nombre 0x0F24 en décimal, ça fait combien ? Calculatrice. Cliquez sur le bouton "Hex", tapez 0F24 (ou plus simplement f24) puis cliquez sur le bouton "Déc", vous verrez 3876 s'afficher. Si vous cliquez sur "Bin" vous verrez 111100100100. Pratique cette calculatrice non ? Le copier/coller marche très bien, utilisez-le dès que vous aurez à travailler sur des nombres binaires.


Comme disait Myrdinn, une structure de données c'est un ensemble de données qui s'appliquent à une entité. Si on vous en parle, c'est parceque c'est comme ça qu'on programme. Quand le jeu crée un monstre dans le jeu par exemple, il vas utiliser une nouvelle portion de la mémoire, précédement vide, et il vas y stocker toutes les données se rapportant à ce monstre, toujours sur le même modèle ! Donc, en connaissant le modèle, on peut décoder les infos de tous les monstres.

...

Bon allez, je suis fatigué, j'arrête là pour aujourd'hui. Ne panniquez pas, si vous comprenez pas tout c'est normal, vous être en train d'avaler un gros morceaux là, en cours d'infos on y passe plusieurs heures sur les bases. Demandez, on vous expliquera ;)
 
B

BoulaTheBoula

Invité
Provient du message de tiissa


@Boula : dans les dlls tu trouves basiquement des fonctions. Certaines de ces fonctions sont (vraissemblablement) attachées au protocole liant le client et le serveur mais le lien entre le paquet que tu observes et ce à quoi il correspond est défini en amont par le programmeur.
Ensuite, à l'aide de ces définitions, il écrit ses fonctions pour faire effectivement correspondre à un lachage d'or une requête du client vers le serveur signifiant ce largage, pour mettre à jour l'état du monde (qui doit être retransmis au client pour affichage).
Dans les dlls on a donc directement l'action à entreprendre à la réception d'un certain "tag" ( 50 dans ton exemple).
La correspondance, c'est à nous de la reconstruire en comprenant ce que font les fonctions (sauf si les développeurs sont gentils...).
Enfin je dis ça, mais c'est peut-être légèrement différent dans didi. ;)

bah en gros c ce que j ai dis :D merci pour cette presition :D

c les dll qui font correspondre l action que u ve executer avec ce que le serveur (enfin sur bnet :D ) fais

donc sa donnerait que le dll du client dis au dll su server f nous un ptit 50 ( :D ) et pis le server y f ok 50= largage d or

c bien sa ou je suis a l ouest ?:D (viens de me reveiller il y a 10 min s:D
 
H

hohorga

Invité
Boula, ici on est pas pressé évites de tout compresser : on a du mal à comprendre ce que tu écrits :)

C'est quoi le nom de la DLL pour décoder le Boula ? :razz:
 
M

Myrdinn

Invité
D'abord merci à tous pour les compliments et à Paul pour le cours
Maintenant je vais répondre point par point à Tiissa.

Provient du message de tiissa
Pour ne pas embrouiller les choses et froisser les informaticiens, je pense qu'il serait plus approprié de se limiter au terme "enregistrement" (ou structure ou record ou ...) plutôt que d'employer le terme objet (qui désigne un formalisme plus élaboré comme l'a rappelé hohorga). ;)

Je risque de froisser les informaticiens (Enfin les programmeurs principalement) car comme je l'ai déjà dit ayant appris tout seul, je suis nul en nomenclature. Bref toute vos remarques sont les bienvenues quitte un jour à réécrire un nouveau post de façon plus propre quand nous aurons bien étudié chaques arguments.

Commencons par le terme Objet. C'est vrai je crois que dans les debug laissés par Blizzard c'est le mot Unit (Unité en français?)qui est utilisé, c'est sans doute plus approprié

Aussi si tu penses que l'hexa peut rebuter les lecteurs tu peux utiliser des symboles à la place des noms (et le faire franchement). ...
Oui. Une petite remarque, tracer les dlls et comprendre l'ensemble des post ne sera pas facile pour tous le monde. Il faudrait un post de 200 pages pour reprendre toutes les bases :lol: . Je vais essayé d'abordé un maximum de point pour pouvoir les approfondir si vous le désirez, mais je ne les exposerais pas en détail de 3 pages systématiquement.

Concernant l'ordre des post j'y ai longuement réfléchit. Je ne pouvais pas faire un seul post directement en traçant dans le code et expliquant les choses au fur et à mesure, ça serait partit dans tous les sens et personne ne comprendrait. J'ai donc décomposé tout ça en 4 posts distincts.
1) La strucutre. Car elle me permet d'expliquer des points comme les pointeurs plus facilement. Une fois que l'on sait ce qu'est une Unit et qu'elle correspond a une zone mémoire, c'est plus facile d'expliquer qu'un pointeur indique l'adresse ou est stoqué cette Unit
2) Un cours rapide sur l'informatique de l'algèbre Booléen (Les informaticiens vont pouvoir crier au sacrilège :lol: ) la structure du processeur et des accès mémoire ( pour pouvoir aborder quelques étrangeté du code assembleur) puis les bases de l'assembleur façon Myrdinn.
3) L'explication d'une fonction (Calcul des dégats physique)
4) Tutorial d'un outil pour tracer cette fonction pour voir concretement comment se passe un trace et ce que l'on peut voir

Je pense aussi qu'il serait bon de rappeler quelques bases sur l'architecture client/serveur car même si on sent bien ce que c'est, il est toujours intéressant d'en connaitre les détails et les limites. :)

En fait je ne vais pas au début parler des relation Client/serveur, je n'aborderais que des bases qui permettront de comprendre les premiers traces et d'en faire tous seul. Peut être plus tard

Enfin, il me semble que d'un point de vue de la présentation, il aurait été judicieux de garder et d'éclaircir la structure du premier post, à savoir d'abord une introduction à certains concepts informatiques puis ensuite en quoi ils nous intéressent dans le jeu (typiquement, tu écris la deuxième partie puis tu définis ce que tu y utilises dans la première)

Ce ne sont pas des remarques très graves, je donne juste quelques conseils quant à une éventuelle amélioration. S'ils semblent pointilleux, c'est peut-être parce qu'il n'y a pas grand chose d'autre à redire. :)
La critique est facile mais... ;)
Encore merci d'avoir fait cet effort...et de continuer. ;)
Merci à toi d'essayer de clarifier les choses. Bon je n'ai jamais écrit ni de cours ni de livre, j'ai fait un choix que j'ai déjà expliqué au dessus pour l'ordre, une fois les 2 premiers post écrits tu pourras choisir l'ordre de lecture tout seul ;) Ces posts seront vraisemblablement réécrit quand on aura travaillé un peu dessus. Enfin on verra pour la suite.

N'hesitez pas à faire des remarques et à poser des questions, il est difficile d'appréhender pour moi ce qui vous est nécessaire
 
H

hohorga

Invité
Concernant l'initiation à l'informatique, à l'héxa, à la programmation en asm je pense qu'il serait moins lourd pour toi de donner des liens vers des sites traitant de ce sujet.

Ca existe déjà, autant ne pas réinventer le fil à couper le beurre à chaque fois et te concentrer sur notre jeu favori ;)

Par exemple tu as ce site en français http://www.commentcamarche.net/ qui est une vrai mine de renseignements mets plutôt le lien vers lui.

Et plus particulièrement dans ce site les liens suivants :
Binaire, hexadécimale
L'assembleur
Le language C
Le C++

Si je retrouve d'autres liens dans mes anciens signets je les posterai.
 
M

Myrdinn

Invité
Merci Hohorga j'hesiterais pas à mettre des liens si nécessaires.

Cependant le post est déjà écrit j'ai juste besoin d'uploader quelques images sur mon FTP ou celui de Paul. Les liens sont toujours utiles pour appronfondir les sujets que j'aborderais.

EDIT Autrement ne vous trompez pas sur mes intentions. Je n'ai pas l'intention de vous initiez à l'informatique ni de vous apprendre à programmer en assembleur. La seule chose que je souhaite vous faire aborder c'est tracer les Dlls, toutes les notions d'informatique/assembleur non utilisés dans ce cadre ne seront pas abordées :D

RE-EDIT Mes liens à moi sont plutôt du genre Develloper.intel.com et risque de vous découragez :lol:
 
H

hohorga

Invité
Sisi donnes les liens, l'idéal étant de faire un classement par niveau de difficulté (j'en suis resté au 386 avec un adressage mémoire flat et plus en segments, j'ai donc une bonne mise à niveau à faire :o ).
 
Haut