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).
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).