Skip to content
OpenMMO edited this page Jan 27, 2014 · 6 revisions

##Format des fichiers T4C Worlds.wda et T4C Edit.wda

Sur cette page vous seront exposés tous les algorithmes et les constantes nécessaires à la programmation de votre propre éditeur de ressources du jeu. Les index de liste déroulante sont les mêmes que ceux des listes déroulantes de l'éditeur Vircom. Le cryptage est un XOR sur des blocs de données de 3418 octets.

###Valeurs des constantes et format des paramètres des effets de sort

Types d'effet de sort et paramètres (données provenant des WDAtools).

NOTE: l'effet "Player edit" n'est pas un effet présent dans le serveur T4C 1.25 de Vircom ; il s'agit d'une addition binaire faite par Jean Suifou sous forme de patch. Cet effet permet de lire/écrire dans un flag défini certains offsets de la structure du joueur, permettant ainsi à un sort de récupérer ou d'agir sur ce dernier de manière plus approfondie que ce que le format WDA de base et l'éditeur de Vircom ne permettent.

 [EFFET]            [PARAMETRE 1]       [PARAMETRE 2]       [PARAMETRE 3]       [PARAMETRE 4]
Modify health      Formule             Rayon               %age de succès
Attribute boost    RT upd. TRUE|FALSE  Nom de la stat      Formule
Modify flag        ID du flag          Valeur
Player edit        0 = Get | 1 = Set   Offset              Taille des données  ID flag dest
Effect 5
Summon             Type (Monster|NPC)  ID texte
Recall             Position X          Position Y          Monde
Effect 8
Spell hook         Sort                Type de hook        %age de succès      Délai initial
Drain health       Formule             Rayon               Dégâts              %age de succès
Sanctuary
Vaporize [GM]
Dispel             Sort                %age de succès
Deal exhaust       Epuis. attaque      Epuis. mental       Epuis. physique     %age de succès
Invisibility       %age de succès      Effet visuel
Detect invis.      %age de succès      Effet visuel
Detect hidden      %age de succès      Effet visuel

Les valeurs ci-dessous sont fournies pour référence seulement car elles concernent l'effet "Player Edit" de Jean Suifou.

 [OFFSET] [TAILLE]  [DESCRIPTION]
96       2 octets  Intelligence pure
98       2 octets  Endurance pure
100      2 octets  Force pure
102      2 octets  Agilité pure
106      2 octets  Sagesse pure
110      2 octets  Esquive pure
112      2 octets  Attaque pure
120      4 octets  ID du joueur dans la base de données
124      4 octets  ID du skin du joueur
128      4 octets  Karma
188      4 octets  Position Y sur la carte
192      4 octets  Numéro du monde (0,1,2,3...)
196      4 octets  Position X sur la carte
238      4 octets  Niveau
312      2 octets  Points de vie maximum
316      2 octets  Points de vie actuels
320      2 octets  Mana maximum
322      2 octets  Mana actuelle
336      4 octets  XP (données incomplètes)
408      4 octets  Or sur soi
480      2 octets  Points de compétence disponibles
482      2 octets  Points de caractéristiques disponibles
12512    2 octets  Poids maximal transportable

###Structure des fichiers T4C Worlds.wda et T4C Edit.wda décryptés

TODO: mettre en forme 
Taille		type			Description
===============================================================================
4		unsigned long		Marqueur (toujours 68775)
1		unsigned char		Type de WDA (T4C Worlds(RO) = 0x01, T4C Edit(RW) = 0x00)

Bloc des Sorts
==============
4		unsigned long		Nombre de sorts

Pour chaque sort:
{
	4		unsigned long		ID du sort (gamme: 10000 - 10999)
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom du sort
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Epuisement mental
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Epuisement physique
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Epuisement attaque
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Durée
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Fréquence de temps
	4		unsigned long		Elément (index liste déroulante, débute à 0)
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Coût de mana
	4		unsigned long		Rayon des dégâts
	4		unsigned long		Effet visuel (index liste déroulante, débute à 30000)
	4		unsigned long		Effet visuel sur la cible (index liste déroulante, débute à 30000)
	4		unsigned long		Type de cible (index liste déroulante, débute à 0)
	4		unsigned long		Type d'attaque (index liste déroulante, 1 = physique, 2 = mentale)
	4		unsigned long		Minimum sagesse
	4		unsigned long		Minimum intelligence
	4		unsigned long		Level minimum
	1		bool			Ligne de vue
	1		bool			Contrôle PVP
	1		bool			Sort d'attaque
	4		unsigned long		Icône du sort (index liste déroulante, débute à 0)
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			% de réussite
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Description
	4		unsigned long		Nombre d'effets du sort

	Pour chaque effet de sort:
	{
		4		unsigned long		Type d'effet (index liste déroulante, débute à 1)
		4		unsigned long		Nombre de paramètres dans l'effet

		Pour chaque paramètre:
		{
			4		unsigned long		Numéro du paramètre (débute à 1)
			4		unsigned long		Taille de la chaîne de caractères suivante
			(variable)	char *			Expression littérale du paramètre
		}
	}

	4		unsigned long		Nombre de sorts pré-requis

	Pour chaque sort pré-requis:
	{
		4		unsigned long		ID du sort pré-requis
	}
}

Bloc des Cartes
===============
4		unsigned long		Nombre de cartes

Dans le cas du fichier T4C Edit.wda, ce fichier ne contient pas de cartes de collision ; la valeur ci-dessus est donc toujours 0 et les données du fichier passent directement au bloc des objets (voir plus loin). Dans le cas du fichier T4C Worlds, ce fichier contient des cartes de collision et les données du fichier incluent donc les structures suivantes.

 Pour chaque carte:
{
	2		unsigned short		Numéro de la carte (indice Z)
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom de la carte
	2		unsigned short		Taille X de la carte (en principe 3072)
	2		unsigned short		Taille Y de la carte (en principe 3072)

	Pour chaque position Y sur la carte:
	{
		Pour chaque position X sur la carte:
		{
			0.5		4 bits			Code de couleur (débute à 0)
		}
	}
}
 
Voici donc le bloc des objets, suivi des blocs restants du fichier : 
Bloc des Objets
===============
4		unsigned long		Nombre d'objets

Pour chaque objet:
{
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			ID de l'objet
	4		unsigned long		ID numérique de l'objet (gamme 89 - LONG_MAX)
	4		unsigned long		Structure de l'objet (index liste déroulante, débute à 0)
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom de l'objet
	4		unsigned long		ID de l'apparence de l'objet
	1		unsigned char		Bitmask (type d'objet): ???|rebut|bijou|potion|magique|signe|armure|arme
	1		unsigned char		??? (toujours 0x00)
	1		unsigned char		??? (toujours 0x00)
	1		unsigned char		??? (toujours 0x00)
	4		unsigned long		Position dans l'équipement (index liste déroulante, débute à 0. -1=non équip)
	4		unsigned long		Prix de vente
	4		unsigned long		Poids
	8		double			Classe d'Armure (CA)
	4		unsigned long		Esquive perdue
	4		unsigned long		Endurance minimum
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Formule de dégâts
	4		unsigned long		Attaque requise
	4		unsigned long		Force requise
	4		unsigned long		Agilité requise
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom de l'objet serrure
	4		unsigned long		Difficulté de la serrure
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Texte du signe
	4		unsigned long		Pièces d'or dans le conteneur
	4		unsigned long		Temps de respawn global du conteneur
	4		unsigned long		Temps de respawn du conteneur
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Temps entre chaque coup
	4		unsigned long		Radiance
	4		unsigned long		Nombre de charges
	4		unsigned long		Intelligence minimum
	4		unsigned long		Sagesse minimum
	4		unsigned long		??? (toujours 0x00)
	1		unsigned char		Bitmask: Non-mul|détr.renaiss|non-cach|non-équip|non-rebut|non-vol|???|non-jet
	1		unsigned char		??? (toujours 0x00)
	1		unsigned char		??? (toujours 0x00)
	1		unsigned char		??? (toujours 0x00)
	1		bool			Objet unique
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Emplacement
	1		bool			Peut être invoqué
	1		bool			Arc
	1		bool			Usage illimité
	1		unsigned long		Nombre de groupes d'objets dans le conteneur

	Pour chaque groupe d'objets dans le conteneur:
	{
		1		unsigned long		Nombre d'objets dans le groupe

		Pour chaque objet dans le groupe:
		{
			4		unsigned long		Taille de la chaîne de caractères suivante
			(variable)	char *			ID de l'objet
		}
	}

	4		unsigned long		Nombre de boosts associés à l'objet

	Pour chaque boost associé à l'objet:
	{
		4		unsigned long		ID du boost (ID sauvée dans la base de données)
		4		unsigned long		Stat à booster
		4		unsigned long		Taille de la chaîne de caractères suivante
		(variable)	char *			Valeur du boost
		4		unsigned long		Intelligence minimum pour que le boost s'active
		4		unsigned long		Sagesse minimum pour que le boost s'active
	}

	4		unsigned long		Nombre de sorts associés à l'objet

	Pour chaque sort associé à l'objet:
	{
		4		unsigned long		ID du sort
		4		unsigned long		Enclenchement (index liste déroulante, débute à 0, NON SEQUENTIEL!)
		4		unsigned long		Level minimum
	}
}

Bloc des Positions des objets
=============================
4		unsigned long		Nombre de positions d'objet

Pour chaque position d'objet:
{
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom de la position d'objet
	4		unsigned long		Position X
	4		unsigned long		Position Y
	4		unsigned long		Numéro de la carte (indice Z)
}

Bloc des Créatures
==================
4		unsigned long		Nombre de créatures

Pour chaque créature:
{
	4		unsigned long		ID numérique (gamme 1 - LONG_MAX)
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			ID de la créature
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom de la créature
	4		unsigned long		Force
	4		unsigned long		Endurance
	4		unsigned long		Agilité
	4		unsigned long		Intelligence
	4		unsigned long		??? (Volonté, toujours 0)
	4		unsigned long		Sagesse
	4		unsigned long		??? (Chance, toujours 0)
	4		unsigned long		Résistance Air
	4		unsigned long		Résistance Terre
	4		unsigned long		Résistance Eau
	4		unsigned long		Résistance Feu
	4		unsigned long		Résistance Nécromancie
	4		unsigned long		Résistance Lumière
	4		unsigned long		Puissance Air
	4		unsigned long		Puissance Terre
	4		unsigned long		Puissance Eau
	4		unsigned long		Puissance Feu
	4		unsigned long		Puissance Nécromancie
	4		unsigned long		Puissance Lumière
	4		unsigned long		Niveau
	4		unsigned long		Points de vie (HP)
	4		unsigned long		Esquive
	8		double			Classe d'armure
	4		unsigned long		Apparence
	4		unsigned long		ID d'objet (vêtement corps)
	4		unsigned long		ID d'objet (vêtement pieds)
	4		unsigned long		ID d'objet (vêtement mains)
	4		unsigned long		ID d'objet (vêtement tête)
	4		unsigned long		ID d'objet (vêtement jambes)
	4		unsigned long		ID d'objet (arme)
	4		unsigned long		ID d'objet (bouclier)
	4		unsigned long		ID d'objet (vêtement dos)
	4		unsigned long		Agressivité
	4		unsigned long		ID du clan de la créature
	4		unsigned long		??? (Vitesse, toujours 0)
	8		double			Expérience reçue par coup porté
	8		double			Expérience reçue à la mort de la créature
	4		unsigned long		Minimum de pièces d'or abandonné par la créature lors de sa mort
	4		unsigned long		Maximum de pièces d'or abandonné par la créature lors de sa mort
	1		bool			Peut attaquer
	4		unsigned long		Nombre de types d'attaque

	Pour chaque type d'attaque:
	{
		4		unsigned long		Taille de la chaîne de caractères suivante
		(variable)	char *			Formule de dégâts
		4		unsigned long		Niveau d'attaque (0 pour les sorts)
		4		unsigned long		Pourcentage de succès
		4		unsigned long		ID du sort lié à l'attaque
		4		unsigned long		Distance minimale de lancement du sort
		4		unsigned long		Distance maximale de lancement du sort
	}

	4		unsigned long		Nombre de flags donnés à la mort de la créature

	Pour chaque flag donné à la mort de la créature:
	{
		4		unsigned long		ID du flag
		4		unsigned long		Valeur du flag
		1		bool			Incrémenter la valeur précédente
	}

	4		unsigned long		Nombre d'objets abandonnés par la créature à sa mort

	Pour chaque objet abandonné par la créature à sa mort:
	{
		4		unsigned long		ID de l'objet abandonné
		8		double			Pourcentage de chances que cet objet soit abandonné
	}
}

Bloc des Groupes de créatures
=============================
4		unsigned long		Nombre de groupes de créatures

Pour chaque groupe de créatures:
{
	4		unsigned long		Temps d'apparition minimum
	4		unsigned long		Temps d'apparition maximum
	4		unsigned long		Distance maximale d'apparition par-rapport à la position indiquée
	4		unsigned long		Nombre minimal d'apparitions
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom du groupe de créatures
	4		unsigned long		Nombre de créatures

	Pour chaque créature:
	{
		4		unsigned long		Taille de la chaîne de caractères suivante
		(variable)	char *			ID de la créature
	}

	4		unsigned long		Nombre de positions d'apparition

	Pour chaque position d'apparition:
	{
		4		unsigned long		Position X
		4		unsigned long		Position Y
		4		unsigned long		Numéro de la carte (indice Z)
	}
}

Bloc des Téléportations
=======================
4		unsigned long		Nombre de téléportations

Pour chaque téléportation:
{
	4		unsigned long		Position X de départ
	4		unsigned long		Position Y de départ
	4		unsigned long		Numéro de la carte (indice Z) de départ
	4		unsigned long		Position X d'arrivée
	4		unsigned long		Position Y d'arrivée
	4		unsigned long		Numéro de la carte (indice Z) d'arrivée
}

Bloc des Relations entre clans
==============================
4		unsigned long		ID du clan la plus élevée (cf. bloc des clans)
4		unsigned long		Nombre de relations entre clans

Pour chaque relation entre clans:
{
	2		unsigned short		ID du premier clan
	2		unsigned short		ID du second clan
	2		signed short		Relation entre les clans (-100 = amour, 0 = neutre, 100 = haine)
}

Bloc des Clans
==============
4		unsigned long		Nombre de clans

Pour chaque clan:
{
	2		unsigned short		ID du clan
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom du clan
}

Bloc des Flags
==============
4		unsigned long		Nombre de flags

Pour chaque flag:
{
	4		unsigned long		ID du flag
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom du flag
}

1		unsigned char		Présence ou non de blocs supplémentaires

Dans le cas du fichier T4C Edit.wda, les sections suivantes n'existent pas ; la valeur char ci-dessus est donc toujours 0, et c'est la fin du fichier. Dans le cas du fichier T4C Worlds.wda, ces blocs existent ; la valeur char ci-dessus est à un et les données du fichier continuent avec les blocs suivants :

 Bloc des Apparences d'objets
============================
4		unsigned long		Nombre d'apparences d'objets

Pour chaque apparence d'objet:
{
	4		unsigned long		ID de l'apparence d'objet
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom de l'apparence d'objet
}

Bloc des Apparences de créatures
================================
4		unsigned long		Nombre d'apparences de créatures

Pour chaque apparence de créature:
{
	4		unsigned long		ID de l'apparence n°1 de la créature
	4		unsigned long		ID de l'apparence n°2 de la créature (?)
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom de l'apparence d'objet
}

Bloc des Lieux
==============
4		unsigned long		Nombre de lieux

Pour chaque lieu:
{
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom du lieu
}

Bloc des Icônes
===============
4		unsigned long		Nombre d'icônes

Pour chaque icône:
{
	4		unsigned long		ID de l'icône
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom de l'icône
}

Bloc des Effets de sort
=======================
4		unsigned long		Nombre d'effets de sort

Pour chaque effet de sort:
{
	4		unsigned long		ID de l'effet de sort
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom de l'effet de sort
}

##Format du fichier NPCs.wda

Sur cette page vous seront exposés tous les algorithmes et les constantes nécessaires à la programmation de votre propre éditeur de PNJs. Les index de liste déroulante sont les mêmes que ceux des listes déroulantes de l'éditeur Vircom. Le cryptage est un XOR sur des blocs de données de 3418 octets.

##Indices des commandes

Les valeurs entre parenthèses sont les valeurs hexa swappées, c'est à dire exactement telles qu'elles apparaissent dans le fichier décrypté parcouru avec un éditeur hexadécimal. Tous les paramètres sont des chaînes de caractères, y compris ceux qui sont censés ne contenir qu'une valeur numérique.

###Structures conditionnelles

Ces valeurs définissent des sous-blocs d'instructions. Ce ne sont pas des instructions à proprement parler mais des marqueurs de sous-bloc.

 Valeur		Structure	Rôle
================================================================================================
2 (02000000)	IF		Evaluation d'expression et branchement conditionnel
5 (05000000)	FOR		Répétition d'un bloc un nombre défini de fois
6 (06000000)	WHILE		Répétition d'un bloc tant qu'une condition évaluée est vraie

Cas spécial:
20 (14000000)	ASSIGNATION	Assignation d'une valeur à une variable temporaire
 
Instructions originales présentes dans la version 1.25 de Vircom 
Valeur		Nom de la commande	Params	Paramètre 1	Paramètre 2	Paramètre 3
================================================================================================
7 (07000000)	GiveItem		1	ID de l'objet
8 (08000000)	GiveXP			1	Formule
9 (09000000)	SetFlag			2	ID du flag	Formule
10 (0A000000)	HealPlayer		1	Formule
11 (0B000000)	SayText			1	Texte
12 (0C000000)	BreakConversation	0
13 (0D000000)	FightPlayer		0
14 (0E000000)	TakeItem		1	ID de l'objet
15 (0F000000)	Teleport		3	Position X	Position Y	Monde
16 (10000000)	CastSpell		1	ID du sort
17 (11000000)	CastSpellOnNPC		1	ID du sort
18 (12000000)	GiveGold		1	Formule
19 (13000000)	TakeGold		1	Formule
21 (15000000)	DisplayItemsSoldByNPC	0
22 (16000000)	DisplayItemsBoughtByNPC	0
23 (17000000)	DisplayTrainedSkills	0
24 (18000000)	DisplayTaughtSkills	0
 
Additions de Dialsoft pour la V2 
Valeur		Nom de la commande	Params	Paramètre 1	Paramètre 2	Paramètre 3
================================================================================================
25 (19000000)	PrivateSysMessage	1	Texte
26 (1A000000)	GlobalSysMessage	1	Texte
27 (1B000000)	ShoutMessage		2	Nom du canal	Message
28 (1E000000)	SetGlobalFlag		2	ID du flag	Formule
29 (1F000000)	GiveKarma		1	Formule

###Structure du fichier NPCs.wda décrypté

TODO: mettre en forme 
Taille		type			Description
===============================================================================
4		unsigned long		Type de WDA ou signature (toujours 1)

Bloc des PNJs
=============
4		unsigned long		Nombre de PNJs

Pour chaque PNJ:
{
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Nom du PNJ
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			ID du PNJ
	4		unsigned long		??? (toujours 1)
	4		unsigned long		Taille de la chaîne de caractères suivante
	(variable)	char *			Apparence du PNJ

	4		unsigned long		Nombre d'objets vendus par le PNJ

	Pour chaque objet vendu par le PNJ:
	{
		4		unsigned long		Taille de la chaîne de caractères suivante
		(variable)	char *			ID de l'objet
		4		unsigned long		Prix de l'objet
	}

	4		unsigned long		Nombre de types d'objets achetés par le PNJ

	Pour chaque type d'objet acheté par le PNJ:
	{
		4		unsigned long		ID du type d'objet (NON SEQUENTIEL)
		4		unsigned long		Prix minimum pour ce type d'objet
		4		unsigned long		Prix maximum pour ce type d'objet
	}

	4		unsigned long		Nombre d'entraînements dispensés par le PNJ

	Pour chaque entraînement dispensé par le PNJ:
	{
		4		unsigned long		ID de la compétence à entraîner (NON SEQUENTIEL)
		4		unsigned long		Points maximum obtenables dans la compétence
		4		unsigned long		Prix de l'entraînement par point de compétence entraîné
	}

	4		unsigned long		Nombre d'enseignements dispensés par le PNJ

	Pour chaque enseignement dispensé par le PNJ:
	{
		4		unsigned long		ID du sort à enseigner
		4		unsigned long		Coût en points de compétences de l'enseignement
		4		unsigned long		Prix de l'enseignement
	}

	4		unsigned long		??? (toujours 1)
	4		unsigned long		??? (toujours 1)
	4		unsigned long		Nombre de répliques

	Pour chaque réplique:
	{
		4		unsigned long		??? (toujours 1)
		1		unsigned char		Type de réplique (0 = normale, 1 = texte initial, 2 = par défaut)
		4		unsigned long		Relation entre les mots-clés (1 = ET, 2 = OU, 3 = ordonné)
		4		unsigned long		Nombre de mots-clés (0 pour texte initial et texte par défaut)

		Pour chaque mot-clé:
		{
			4		unsigned long		Taille de la chaîne de caractères suivante
			(variable)	char *			Mot-clé
		}

	+--> ::	4		unsigned long		??? (toujours 1)
	|    ::	4		unsigned long		??? (toujours 1)
	|    ::	4		unsigned long		Nombre d'instructions
	|    ::
	|    ::	Pour chaque instruction:
	|    ::	{
	|    ::		4		unsigned long		ID de l'instruction
	|    ::
	|    ::		Si ID de l'instruction == "IF" (02000000)
	|    ::		{
	|    ::			4		unsigned long		Taille de la chaîne de caractères suivante
	|    ::			(variable)	char *			Condition de l'instruction
	|    ::
	|    ::			1		unsigned char		Présence de cas général (ELSE)
	|    ::
	|    ::			Si présence de cas général:
	|    ::			{
	+----::------------------------	Réentrance
	|    ::			}
	|    ::
	|    ::			4		unsigned long		Nombre de cas supplémentaires (ELSE IF)
	|    ::
	|    ::			Pour chaque cas supplémentaire:
	|    ::			{
	|    ::				4		unsigned long		Taille de la chaîne de caractères suivante
	|    ::				(variable)	char *			Condition du cas
	+----::------------------------ Réentrance
	|    ::			}
	|    ::
	+----::---------------- Réentrance
	|    ::		}
	|    ::		Sinon si ID de l'instruction == "FOR" (05000000)
	|    ::		{
	|    ::			4		unsigned long		Taille de la chaîne de caractères suivante
	|    ::			(variable)	char *			Valeur de départ de la boucle
	|    ::			4		unsigned long		Taille de la chaîne de caractères suivante
	|    ::			(variable)	char *			Valeur d'arrivée de la boucle
	|    ::			4		unsigned long		Taille de la chaîne de caractères suivante
	|    ::			(variable)	char *			Nom de la variable à incrémenter
	+----::---------------- Réentrance
	|    ::		}
	|    ::		Sinon si ID de l'instruction == "WHILE" (06000000)
	|    ::		{
	|    ::			4		unsigned long		Taille de la chaîne de caractères suivante
	|    ::			(variable)	char *			Condition de la boucle
	+----::---------------- Réentrance
	     ::		}
	     ::		Sinon si ID de l'instruction == NOMINATION (14000000)
	     ::		{
	     ::			4		unsigned long		Taille de la chaîne de caractères suivante
	     ::			(variable)	char *			Variable
	     ::			4		unsigned long		Taille de la chaîne de caractères suivante
	     ::			(variable)	char *			Valeur
	     ::		}
	     ::		Sinon
	     ::		{
	     ::			4		unsigned long		Nombre de paramètres de l'instruction
	     ::
	     ::			Pour chaque paramètre de l'instruction:
	     ::			{
	     ::				4		unsigned long		Taille de la chaîne de caractères suivante
	     ::				(variable)	char *			Paramètre de l'instruction
	     ::			}
	     ::		}
	     ::
	     ::		4		unsigned long		??? (toujours 1)
	     ::	}
	}
}

##Cryptographie des fichiers WDA

###Clé de cryptage

Il s'agit d'un tableau de 3418 octets choisis arbitrairement par Vircom pour masquer les données originales avec la technique du ou exclusif (XOR). Cette technique est la technique d'encryption la plus simple qui soit : la même clé, combinée à la même opération, soit encrypte soit décrypte chaque octet des données sur laquelle elle s'applique.

Voici la clé utilisée par Vircom pour masquer les données :

unsigned char key[3418] = 
{
	0xE1, 0xC4, 0x9B, 0x1B, 0xC0, 0xC6, 0x30, 0xC5, 0x0D, 0x58, 0xB7, 0x01, 0xCE, 0x7F, 0x33, 0xD3, 0x07, 0x3D, 0xA9,
	0x3F, 0xBA, 0x99, 0x1C, 0x4A, 0xED, 0x94, 0x90, 0xF7, 0xA3, 0x33, 0x09, 0x4A, 0xE1, 0x7B, 0x8B, 0x47, 0xA9, 0x6F,
	0x1B, 0xF3, 0x01, 0x14, 0xBC, 0x51, 0xED, 0x6C, 0x73, 0x65, 0x6F, 0x7D, 0x42, 0x34, 0x8D, 0x4A, 0x2F, 0xC1, 0x4A,
	0xD8, 0x3D, 0x10, 0xAA, 0x2A, 0x71, 0x25, 0xB1, 0x43, 0xCD, 0x05, 0x64, 0x2A, 0x57, 0xB3, 0xC6, 0xE0, 0x12, 0x33,
	0xDC, 0x6B, 0x03, 0x89, 0xA8, 0xCE, 0x2C, 0xBA, 0x30, 0x0D, 0x93, 0xC9, 0x77, 0x2D, 0x3C, 0xBA, 0x82, 0x31, 0x29,
	0x91, 0x53, 0x1D, 0x60, 0x53, 0xF0, 0xF5, 0xE4, 0x03, 0x5C, 0xBE, 0xB9, 0xA5, 0x9C, 0x7B, 0xE4, 0x3E, 0xB2, 0x30,
	0x68, 0xD1, 0xA4, 0xE1, 0x49, 0x62, 0x76, 0x93, 0x8B, 0xF5, 0x2A, 0x49, 0x33, 0x8F, 0xC6, 0x07, 0x44, 0x32, 0x4D,
	0xD1, 0xC2, 0xE4, 0xC3, 0xAC, 0xB1, 0xA9, 0x2D, 0x9B, 0x16, 0x84, 0x8E, 0xA2, 0xF4, 0x78, 0xEA, 0xC6, 0x4F, 0x8C,
	0x45, 0x0A, 0x2C, 0xC1, 0xA4, 0x72, 0x8D, 0x1D, 0x0A, 0x02, 0x79, 0xA3, 0x7B, 0xBF, 0xF1, 0x57, 0xFB, 0xAC, 0xFA,
	0x3D, 0x8F, 0xCD, 0x99, 0x5A, 0x3A, 0x26, 0xD1, 0xB1, 0x00, 0xBC, 0xA7, 0x47, 0xE6, 0x92, 0x1D, 0x1E, 0xEE, 0xAC,
	0x39, 0x3C, 0x1E, 0x0E, 0xFE, 0xA4, 0x7A, 0xBD, 0x71, 0x5A, 0x04, 0xBC, 0x94, 0x63, 0xC2, 0x0F, 0x6D, 0xC2, 0xB7,
	0xBB, 0x00, 0x7B, 0xE7, 0xC3, 0x4F, 0x92, 0x57, 0x2B, 0x60, 0x0C, 0x0A, 0xF7, 0x36, 0xEC, 0x04, 0x2C, 0xD5, 0x36,
	0x49, 0xCC, 0x42, 0xEF, 0xDE, 0x7F, 0x1A, 0xC6, 0x63, 0x92, 0xBB, 0x05, 0x61, 0x7F, 0xD6, 0xA0, 0xDB, 0x48, 0x6F,
	0x99, 0xD5, 0xF3, 0x8B, 0xF6, 0x53, 0x83, 0x2D, 0xBB, 0x5A, 0xFD, 0x5A, 0xEA, 0xED, 0x63, 0x14, 0x89, 0x10, 0xBB,
	0x61, 0x9B, 0xC8, 0x09, 0x44, 0x24, 0x17, 0x4F, 0xC2, 0x29, 0x03, 0x93, 0xDD, 0xAD, 0x90, 0xD8, 0x9B, 0xB4, 0xC0,
	0x22, 0xFF, 0x42, 0x99, 0x76, 0x0E, 0x5C, 0x1E, 0xD6, 0xCB, 0x05, 0x54, 0x48, 0x3A, 0x41, 0x3D, 0xD0, 0x5F, 0x15,
	0xDF, 0x70, 0x3E, 0x83, 0x3D, 0x2E, 0xDC, 0x91, 0x5C, 0x0D, 0x3C, 0x43, 0x3E, 0x12, 0x63, 0x9B, 0xE9, 0x3F, 0x53,
	0x9F, 0x61, 0x9A, 0x12, 0x52, 0xA8, 0x26, 0xA3, 0xB8, 0xC4, 0xE8, 0x0B, 0xD6, 0xB8, 0xE3, 0x4C, 0xAF, 0x88, 0x1B,
	0x6C, 0x47, 0x39, 0x94, 0x6E, 0xA2, 0xCD, 0x52, 0x57, 0xC5, 0x4B, 0x5A, 0x29, 0xB3, 0xB4, 0xAF, 0xEA, 0x70, 0x0E,
	0x55, 0x9E, 0x00, 0x5B, 0x51, 0x47, 0x68, 0xA2, 0xA6, 0xEB, 0xAB, 0xE4, 0x58, 0x8D, 0xCD, 0x27, 0x6B, 0x31, 0xD3,
	0x6E, 0xE4, 0xDC, 0xC0, 0xBD, 0xC6, 0x91, 0x98, 0x18, 0x15, 0x54, 0x5F, 0x84, 0xD5, 0x29, 0x19, 0x04, 0x0B, 0x15,
	0xCB, 0x9C, 0xBA, 0x1B, 0x78, 0x51, 0xE6, 0x3F, 0x25, 0x26, 0x94, 0x85, 0xD4, 0x1F, 0xC7, 0xF2, 0x8B, 0x40, 0x83,
	0x89, 0x4D, 0x8E, 0xCC, 0x4E, 0x1F, 0x0C, 0xA6, 0x46, 0x03, 0xBE, 0x16, 0x74, 0xFF, 0xA8, 0x1F, 0xDC, 0x17, 0xCF,
	0xC6, 0x82, 0x4D, 0x36, 0x0D, 0x6A, 0xA7, 0xE1, 0xFA, 0x99, 0x28, 0xD4, 0x90, 0x12, 0xD4, 0x14, 0xD4, 0xDA, 0xB0,
	0xA4, 0xC9, 0xF3, 0xBF, 0x88, 0x72, 0x63, 0x05, 0xC5, 0xD6, 0x2D, 0x86, 0x5E, 0xF6, 0x56, 0x47, 0x57, 0xD8, 0xE0,
	0x4A, 0xB4, 0x7F, 0xD1, 0x96, 0x7A, 0xEF, 0x2D, 0x2C, 0xAB, 0x2D, 0xF6, 0x12, 0x4D, 0x3C, 0x32, 0x4B, 0x64, 0x20,
	0xE4, 0xDB, 0xF3, 0xDD, 0x10, 0xC6, 0xFD, 0x78, 0xBB, 0x11, 0x89, 0xF3, 0xE8, 0xBF, 0x98, 0x55, 0x9B, 0xD4, 0x30,
	0x9F, 0xD8, 0x55, 0x54, 0xD7, 0xA4, 0x45, 0x08, 0x00, 0x01, 0xA8, 0x50, 0x1E, 0xF6, 0x82, 0x31, 0x35, 0x84, 0xD8,
	0xAE, 0x4A, 0xB1, 0xAD, 0xCC, 0x60, 0x80, 0x05, 0x8D, 0x7B, 0xF5, 0xE4, 0xF7, 0xA0, 0x14, 0x4F, 0x0D, 0xD1, 0xE2,
	0x49, 0xD3, 0x15, 0x62, 0xD6, 0x4E, 0x6D, 0x98, 0xFA, 0x81, 0xDE, 0x89, 0xBA, 0x70, 0x6D, 0x38, 0x19, 0x20, 0x1D,
	0xA9, 0x1B, 0x93, 0xF3, 0xE0, 0xC5, 0xCF, 0xF1, 0xE2, 0x1A, 0xD7, 0x1D, 0xB1, 0x1E, 0xB0, 0x7B, 0x54, 0xD5, 0x5D,
	0x0D, 0xCC, 0x43, 0xE2, 0xD9, 0x1F, 0x6D, 0x43, 0xE2, 0x4F, 0x56, 0x85, 0x2C, 0x63, 0x03, 0xAA, 0xBB, 0x5C, 0x76,
	0xB8, 0x94, 0x40, 0xB5, 0xB3, 0xBA, 0x12, 0xC4, 0x9D, 0x32, 0xD6, 0xA5, 0x7C, 0xFE, 0x91, 0x5E, 0x53, 0x24, 0x45,
	0xF2, 0x27, 0xA7, 0xF8, 0x65, 0xFB, 0x8B, 0xAE, 0xBB, 0xD2, 0xD5, 0x69, 0xF9, 0xB3, 0x88, 0x2F, 0x22, 0x9F, 0xA8,
	0x03, 0x3A, 0x9C, 0x3A, 0xEA, 0x46, 0xAD, 0x40, 0xE6, 0x49, 0xD6, 0xC0, 0xFD, 0x47, 0x1C, 0xBD, 0x32, 0x44, 0x82,
	0x3C, 0x8A, 0x45, 0x0C, 0x40, 0x07, 0x4D, 0xBE, 0xCD, 0xAF, 0x60, 0x9D, 0xE7, 0x86, 0x82, 0xAB, 0x93, 0x8E, 0xB8,
	0xEF, 0xD3, 0xCD, 0x05, 0x6A, 0xAE, 0x46, 0x6D, 0x22, 0x25, 0xFD, 0xF5, 0x1A, 0x3E, 0xF7, 0xA0, 0x56, 0xFB, 0x37,
	0x72, 0xDA, 0x63, 0xC1, 0x6F, 0xAB, 0x77, 0x99, 0x9B, 0xCC, 0x3D, 0xC4, 0xFB, 0x41, 0xB8, 0x45, 0x92, 0x0F, 0xEC,
	0x20, 0x65, 0x38, 0xDD, 0x59, 0x76, 0xC2, 0x90, 0xF5, 0xCB, 0xB1, 0x08, 0xF7, 0x67, 0x07, 0x49, 0x63, 0x4F, 0xCA,
	0x58, 0x3E, 0x85, 0xFD, 0x38, 0x8A, 0x0F, 0xA5, 0xED, 0x4D, 0xF0, 0xC4, 0x7B, 0x8B, 0x2D, 0x60, 0xE7, 0x46, 0xC9,
	0x7C, 0x34, 0x84, 0xC8, 0x1D, 0x66, 0x48, 0x2E, 0x46, 0x81, 0x96, 0xFF, 0xFB, 0x8A, 0x73, 0x40, 0x84, 0xE2, 0xF4,
	0x19, 0x73, 0xE7, 0x20, 0x8B, 0x5B, 0x86, 0xC6, 0x99, 0x41, 0xC4, 0xEC, 0x47, 0x28, 0xA4, 0x95, 0x9A, 0x14, 0x2A,
	0xC6, 0x95, 0x0A, 0x5B, 0x81, 0x3C, 0x0D, 0x39, 0xCC, 0x93, 0x21, 0xCA, 0xAA, 0x9F, 0x4A, 0x12, 0x20, 0x63, 0x8D,
	0x13, 0x31, 0xE3, 0xEC, 0xD3, 0xE1, 0x23, 0x6E, 0x55, 0x34, 0x28, 0x14, 0x9D, 0x2E, 0xF5, 0xE4, 0xB0, 0xD4, 0x8E,
	0xE1, 0x91, 0x29, 0xF8, 0x0F, 0x44, 0x32, 0x36, 0x72, 0xCD, 0xF1, 0x4C, 0x0F, 0x31, 0x6C, 0x3E, 0xE9, 0x73, 0xA6,
	0x10, 0x04, 0x97, 0xA3, 0xC7, 0x65, 0xA2, 0x68, 0x66, 0x0E, 0x96, 0xF8, 0xF2, 0x05, 0x79, 0x57, 0x6D, 0x4E, 0x8A,
	0xDD, 0xEB, 0x1A, 0x93, 0x45, 0xE2, 0xE0, 0x78, 0xAA, 0x36, 0xA4, 0x3D, 0x0E, 0xEC, 0x6A, 0xE4, 0x77, 0x06, 0x37,
	0x73, 0xE9, 0x8A, 0x0E, 0xED, 0x66, 0x7B, 0xF3, 0x56, 0xF4, 0xDE, 0xEA, 0xB3, 0x96, 0xB5, 0xF8, 0x07, 0x50, 0x06,
	0x20, 0x56, 0x27, 0xD5, 0x66, 0xA4, 0x1D, 0x24, 0xCE, 0xF6, 0x38, 0xF9, 0x5D, 0x4E, 0x7C, 0x57, 0x16, 0xB3, 0xEB,
	0x42, 0xFD, 0x26, 0x8B, 0xBF, 0x17, 0xAD, 0x5F, 0xD1, 0x66, 0x4B, 0x6C, 0x7C, 0xF0, 0x04, 0xB4, 0xC4, 0xB9, 0xDC,
	0x3D, 0xAE, 0xC3, 0xD8, 0x0B, 0x3D, 0x14, 0xFB, 0x20, 0x75, 0xAF, 0x49, 0x82, 0x5A, 0x98, 0xC7, 0x34, 0xF1, 0xD4,
	0x78, 0x3A, 0x3D, 0x66, 0x60, 0x99, 0x42, 0x52, 0x83, 0x53, 0x04, 0x9D, 0xE6, 0x6E, 0x88, 0x49, 0x8C, 0xEE, 0xD1,
	0x5C, 0x79, 0xD5, 0xE3, 0xD9, 0xB1, 0x29, 0xC3, 0xC5, 0x39, 0xED, 0x74, 0x23, 0x14, 0x26, 0xFA, 0xF7, 0x46, 0xD6,
	0x59, 0x45, 0xD4, 0x03, 0x96, 0x11, 0xC0, 0xB0, 0xB4, 0x60, 0x10, 0xE2, 0xB7, 0x35, 0xC8, 0x9C, 0xA3, 0x95, 0xEA,
	0xE1, 0x7D, 0x82, 0x7C, 0xB8, 0x48, 0x02, 0x81, 0x22, 0x08, 0x18, 0xFD, 0x25, 0xC1, 0xC9, 0xF5, 0xC4, 0x78, 0x17,
	0x6C, 0x03, 0x30, 0x08, 0x66, 0xE7, 0xED, 0xA0, 0xE7, 0x73, 0xB4, 0xE1, 0xF4, 0xAB, 0x88, 0xD1, 0x90, 0x93, 0x6D,
	0x73, 0xBF, 0x30, 0x67, 0xCB, 0x86, 0x85, 0x7B, 0xDE, 0xE7, 0x96, 0xAC, 0xAE, 0xE8, 0x67, 0xFE, 0x41, 0x8C, 0xFD,
	0x75, 0x9B, 0xD8, 0x5B, 0x16, 0xBE, 0xCF, 0x85, 0xE4, 0xB0, 0x75, 0x80, 0xE3, 0x74, 0xCE, 0x4E, 0x17, 0x0F, 0xDF,
	0xF5, 0x85, 0x83, 0xAB, 0x79, 0x30, 0xD6, 0x36, 0xDC, 0x1C, 0x0B, 0x84, 0x24, 0x4E, 0x27, 0x9A, 0x54, 0xC8, 0x2D,
	0x7B, 0x71, 0x91, 0x21, 0x2B, 0x7D, 0xAA, 0x07, 0xAE, 0x7E, 0x18, 0xE3, 0x09, 0x77, 0xE0, 0xBA, 0x3F, 0x6D, 0x05,
	0x8F, 0x54, 0x62, 0x8C, 0x66, 0x4D, 0x5C, 0x77, 0x44, 0x2C, 0x5E, 0xCC, 0x2C, 0xF7, 0x6D, 0x8E, 0x22, 0xB2, 0x8C,
	0xC2, 0x2A, 0x5F, 0xBF, 0x6B, 0x49, 0x04, 0x0A, 0x8D, 0x82, 0xA4, 0x71, 0x2C, 0xD9, 0x44, 0xF9, 0x4C, 0x53, 0xE6,
	0xA5, 0xF2, 0x90, 0x7A, 0x21, 0xBC, 0x45, 0x7A, 0xDD, 0xB4, 0x0A, 0xAB, 0x2B, 0xDF, 0xE1, 0x10, 0x0E, 0x40, 0xD0,
	0xAE, 0x8A, 0xDB, 0x87, 0xA3, 0xB4, 0x04, 0xA1, 0x5E, 0xD0, 0x51, 0xFF, 0xBE, 0x31, 0xC5, 0xA6, 0xC7, 0xDD, 0x64,
	0x99, 0x7D, 0xD8, 0x33, 0xDC, 0xE5, 0x24, 0x34, 0x73, 0x02, 0xC7, 0x6E, 0x62, 0xD8, 0xC5, 0xE2, 0xAE, 0x6C, 0x20,
	0x95, 0x5A, 0xC0, 0xDE, 0x8C, 0x6B, 0xDA, 0x02, 0xCB, 0xE3, 0xBE, 0x90, 0x54, 0xC8, 0x6E, 0x8C, 0x2D, 0x1D, 0xF0,
	0xFB, 0x59, 0xE7, 0x47, 0xE0, 0xDC, 0x28, 0x77, 0x3F, 0xBA, 0xE6, 0x85, 0x1D, 0xF8, 0x24, 0x74, 0x7D, 0x99, 0xE7,
	0x48, 0x63, 0xA1, 0x31, 0x05, 0xD3, 0x15, 0x08, 0xB0, 0xD2, 0xF8, 0x70, 0x4C, 0x63, 0x4E, 0x6B, 0xDD, 0x8A, 0x1B,
	0xFF, 0x68, 0x4B, 0x64, 0x2F, 0xEF, 0xAB, 0x2B, 0xFF, 0x78, 0xAD, 0x77, 0x74, 0x07, 0x55, 0x49, 0x91, 0x9E, 0xA7,
	0x5A, 0x43, 0xA8, 0x94, 0xD3, 0xF9, 0x5B, 0x14, 0x01, 0xC4, 0x2B, 0xE7, 0xA9, 0xE8, 0xDE, 0x89, 0xAB, 0xCA, 0x30,
	0xEB, 0xCE, 0x6E, 0x25, 0x12, 0x16, 0xD8, 0xC2, 0x01, 0x88, 0x0D, 0x09, 0xBC, 0x27, 0x10, 0x00, 0x48, 0xF7, 0xE5,
	0xAB, 0xA7, 0xFC, 0x90, 0x0C, 0xDF, 0x3B, 0x16, 0x29, 0xF4, 0xB7, 0x7A, 0x05, 0xE8, 0x74, 0xC0, 0xA5, 0xC1, 0x77,
	0xEC, 0x0B, 0x82, 0xC3, 0x03, 0x3D, 0x2F, 0x5C, 0x08, 0x3E, 0xCD, 0x46, 0xFF, 0x13, 0x5F, 0x86, 0xED, 0xBF, 0xE9,
	0x1E, 0xD5, 0x46, 0x6F, 0x14, 0xBB, 0xAC, 0xF6, 0x6C, 0xA3, 0xF5, 0x81, 0x28, 0x91, 0x26, 0x14, 0x4E, 0x8A, 0x42,
	0xB4, 0xE2, 0x91, 0x4D, 0x64, 0xE6, 0xAB, 0x4C, 0x28, 0x60, 0xDA, 0x42, 0x04, 0x53, 0x24, 0x33, 0xFC, 0xC3, 0x8C,
	0x23, 0x15, 0xB4, 0x17, 0x52, 0x2B, 0xC8, 0x12, 0xB8, 0x2B, 0xA3, 0x18, 0x49, 0xB8, 0xAC, 0x2D, 0x0B, 0xD7, 0xE7,
	0x56, 0x01, 0x8B, 0x59, 0x96, 0x30, 0xD8, 0x05, 0xF1, 0x9A, 0xC2, 0xEF, 0x6C, 0x45, 0x4E, 0x1C, 0x09, 0x34, 0x7F,
	0x8F, 0xCE, 0x6C, 0x59, 0x4C, 0xBF, 0xF0, 0xE0, 0x57, 0xDE, 0xC4, 0x19, 0xB5, 0x31, 0xEC, 0x07, 0x69, 0xBB, 0x6C,
	0xAE, 0x77, 0x81, 0x49, 0x13, 0xE3, 0x85, 0x86, 0x38, 0xB2, 0xCD, 0x27, 0x23, 0xE7, 0x5C, 0x31, 0xD8, 0x86, 0x37,
	0xA7, 0x59, 0x94, 0x60, 0x8D, 0xAC, 0x13, 0xDD, 0xE7, 0xD4, 0x09, 0xB1, 0xBA, 0xD5, 0x7A, 0xE1, 0x09, 0xB4, 0x68,
	0x70, 0xD8, 0x74, 0xD9, 0x62, 0x2C, 0x19, 0xD0, 0xBB, 0x07, 0xA7, 0x51, 0x7F, 0x6F, 0x23, 0x61, 0xB3, 0x67, 0x90,
	0x03, 0x5A, 0xF4, 0xF2, 0x3B, 0x79, 0x19, 0x4E, 0x0D, 0x12, 0xDA, 0xA6, 0x7E, 0x2B, 0x3B, 0x00, 0x91, 0xC7, 0x41,
	0x60, 0x4A, 0xEB, 0xEF, 0xC8, 0xAE, 0x99, 0x49, 0x3E, 0xC0, 0xD7, 0x53, 0xC5, 0x84, 0xA8, 0x12, 0x61, 0xFE, 0x11,
	0x88, 0x17, 0x32, 0x14, 0xBC, 0xEA, 0x25, 0xB7, 0xAF, 0xDE, 0xDA, 0xFE, 0x67, 0xF7, 0x55, 0xEB, 0xE7, 0x3A, 0x9B,
	0x84, 0x33, 0xAA, 0xAF, 0xCC, 0x4F, 0x4B, 0x95, 0xC7, 0x40, 0x22, 0x51, 0x7A, 0x09, 0x31, 0xE8, 0xAF, 0x7E, 0x5D,
	0x15, 0x34, 0x0C, 0xB4, 0x05, 0x9E, 0xE0, 0xF2, 0xBD, 0xF0, 0xFD, 0x19, 0x40, 0x2E, 0x67, 0x2F, 0x92, 0x5D, 0x22,
	0x38, 0xB7, 0x80, 0x33, 0x36, 0xB4, 0x9B, 0x9D, 0x2F, 0x8C, 0xB2, 0x64, 0x26, 0x43, 0xCA, 0x8C, 0x1F, 0xDE, 0xE6,
	0x1A, 0x1F, 0x60, 0x0A, 0x11, 0x29, 0xCD, 0x3B, 0x75, 0x41, 0x29, 0x7B, 0x4A, 0x6B, 0x79, 0xD0, 0x95, 0xAC, 0xBF,
	0x3E, 0x59, 0x07, 0x01, 0xC7, 0x9A, 0x80, 0x43, 0x71, 0x5D, 0x1B, 0x87, 0x3F, 0xA4, 0xDD, 0xD3, 0x35, 0x75, 0xC9,
	0x2B, 0x58, 0xD4, 0xE3, 0x91, 0xAB, 0xC3, 0x30, 0x0B, 0x32, 0x48, 0xB2, 0x9C, 0xF1, 0x66, 0x6F, 0x48, 0xED, 0x21,
	0x6B, 0x13, 0x29, 0x7E, 0xA8, 0x02, 0xA9, 0x80, 0x2C, 0x18, 0x72, 0x2B, 0xFA, 0x59, 0x86, 0x83, 0x17, 0xCA, 0xEB,
	0x8D, 0x85, 0x6E, 0xA5, 0x4C, 0x4A, 0x49, 0xB6, 0xC4, 0x69, 0x5F, 0x24, 0xFA, 0xE7, 0xB5, 0xF2, 0xF1, 0xC6, 0x4E,
	0x24, 0xAD, 0x0C, 0x2E, 0xBF, 0x32, 0xBD, 0x59, 0xC6, 0x84, 0xDB, 0xD4, 0x3D, 0xA8, 0x6C, 0xA2, 0x28, 0xA1, 0x73,
	0xC7, 0x8C, 0x74, 0xF4, 0x47, 0x6C, 0x23, 0xF4, 0x27, 0xCC, 0xB4, 0x75, 0x6A, 0xB0, 0x2A, 0x7E, 0x14, 0x1D, 0x8A,
	0x10, 0x2A, 0x16, 0xD6, 0x30, 0xAF, 0x9F, 0x14, 0xE3, 0xA7, 0xBD, 0x47, 0x2C, 0x16, 0x73, 0x74, 0x10, 0x01, 0xC5,
	0x9E, 0x92, 0x6B, 0xB7, 0xC9, 0xB5, 0x58, 0x4E, 0xF9, 0x80, 0xCC, 0x8C, 0x32, 0xF4, 0xCC, 0x77, 0x79, 0x17, 0x5B,
	0x13, 0xD1, 0xEC, 0x7D, 0x62, 0x3F, 0x77, 0x36, 0x6A, 0xC5, 0xBD, 0x8B, 0x2F, 0x69, 0xC0, 0x7F, 0xB3, 0x2E, 0x87,
	0x16, 0xFC, 0x18, 0x13, 0x55, 0x0D, 0x2C, 0x69, 0x3F, 0xEA, 0x6D, 0x8E, 0xD8, 0x97, 0xDF, 0x85, 0x24, 0x19, 0x87,
	0x53, 0x28, 0x73, 0x67, 0xFA, 0xE6, 0xA9, 0x85, 0x80, 0x65, 0xC0, 0xE5, 0xE9, 0xA6, 0xBB, 0x89, 0x37, 0xAF, 0x9E,
	0x77, 0x70, 0x82, 0x6D, 0xB2, 0x97, 0x26, 0x2D, 0x3E, 0xB0, 0x9C, 0xE1, 0x20, 0xBF, 0xEA, 0x8D, 0x5B, 0xC9, 0x13,
	0x35, 0xF3, 0xD1, 0x1B, 0xDE, 0xEC, 0xDC, 0x07, 0x8B, 0x4B, 0xEC, 0xD9, 0x40, 0x13, 0x07, 0x97, 0x02, 0x48, 0x30,
	0x45, 0xD3, 0xEE, 0x6C, 0xE5, 0xB9, 0x0A, 0xBD, 0x7D, 0xB8, 0x9F, 0x29, 0x10, 0xD2, 0xB1, 0xB3, 0xA2, 0x0D, 0x45,
	0x60, 0x38, 0x6C, 0x5D, 0x32, 0xD5, 0xF3, 0xFF, 0x2F, 0x7D, 0xA7, 0x2F, 0x5B, 0x35, 0x8B, 0xEF, 0xB8, 0xFF, 0xA3,
	0x45, 0x4C, 0xE1, 0xF3, 0x34, 0x1A, 0xDE, 0x80, 0xC1, 0x26, 0xFB, 0x4D, 0xEE, 0x75, 0x3B, 0x5E, 0xC1, 0x0A, 0xA2,
	0xB8, 0x3D, 0xE9, 0x34, 0x5D, 0x67, 0x16, 0xF6, 0x53, 0x41, 0x96, 0xEA, 0x9E, 0xD1, 0x6C, 0x16, 0x40, 0x1A, 0x9C,
	0x7E, 0x3F, 0x21, 0x2A, 0x24, 0x9E, 0xE9, 0x1B, 0x0E, 0x61, 0x76, 0x72, 0x3F, 0x8D, 0xCC, 0x33, 0xBC, 0x25, 0xEF,
	0x62, 0x87, 0x2D, 0xE4, 0x04, 0xA6, 0xA9, 0xAE, 0x1C, 0x1D, 0x9E, 0x52, 0xAE, 0xEE, 0x0F, 0xD2, 0xBF, 0x1F, 0x00,
	0x34, 0x52, 0xB3, 0x75, 0x7B, 0x6B, 0xAE, 0x73, 0xAC, 0x0E, 0x15, 0xFD, 0xC9, 0x40, 0xEA, 0x17, 0xD8, 0x04, 0x34,
	0xC6, 0xDD, 0x5E, 0xF4, 0x0D, 0xDA, 0x52, 0x2F, 0xF0, 0xD5, 0xE5, 0xEA, 0x73, 0xD1, 0x1A, 0x28, 0x9A, 0xD2, 0xF5,
	0xEE, 0x6A, 0xDC, 0x7B, 0x3E, 0xE6, 0xF4, 0xAE, 0x1E, 0x13, 0x1D, 0x94, 0x92, 0xF3, 0x5C, 0x31, 0x9C, 0x8C, 0xB3,
	0x87, 0x42, 0xE1, 0x28, 0x9C, 0x87, 0xF7, 0xBE, 0x73, 0x6F, 0xD1, 0x7A, 0x10, 0xFF, 0x72, 0x5E, 0x78, 0x39, 0xE1,
	0x70, 0xAE, 0x23, 0x1F, 0xB3, 0xB6, 0xC1, 0x32, 0x2C, 0x94, 0x15, 0x1D, 0xDE, 0x4D, 0x25, 0xE4, 0xCC, 0xE4, 0xF4,
	0x8C, 0xFD, 0x5D, 0x87, 0x18, 0x72, 0xBC, 0xE0, 0x8C, 0x31, 0x06, 0x05, 0xEC, 0x3D, 0x3E, 0xF9, 0x3D, 0x9A, 0x68,
	0xC1, 0x82, 0x4D, 0x89, 0x5F, 0xBF, 0x59, 0xA4, 0xD9, 0xF8, 0xC2, 0xBD, 0x33, 0x32, 0x8C, 0xD8, 0x6F, 0x70, 0xBC,
	0xFA, 0x93, 0xB6, 0x55, 0x25, 0xA2, 0x08, 0x5B, 0x60, 0xA0, 0x6B, 0xD2, 0xAC, 0x92, 0xE2, 0xBF, 0x0F, 0x7B, 0x71,
	0x25, 0x8B, 0x5F, 0x1D, 0x08, 0x27, 0x42, 0xE9, 0x6D, 0xE4, 0x29, 0xD9, 0x57, 0xC8, 0x17, 0xF1, 0xCA, 0xD6, 0x10,
	0x36, 0xCA, 0x12, 0x18, 0xAB, 0x5B, 0x80, 0x34, 0x54, 0x82, 0x25, 0x67, 0x35, 0x42, 0x04, 0xB5, 0x53, 0xA0, 0x22,
	0x23, 0xB1, 0x9E, 0x81, 0xB3, 0x53, 0x42, 0x27, 0x6B, 0x3D, 0x8F, 0x17, 0x4F, 0x74, 0x8A, 0x55, 0x61, 0xFB, 0x35,
	0xE6, 0xA7, 0xD6, 0x96, 0xCD, 0x24, 0x0A, 0xB1, 0x0E, 0xDC, 0x9A, 0x88, 0xAD, 0xD4, 0x8A, 0x21, 0xAF, 0x0F, 0xDE,
	0x7F, 0x17, 0x91, 0x9B, 0xA6, 0xE9, 0x5E, 0xC4, 0x9B, 0x2A, 0x7B, 0x5D, 0x60, 0xDD, 0xEB, 0x6A, 0xFB, 0x06, 0xB2,
	0xF0, 0x70, 0xA9, 0xD5, 0xF2, 0xC1, 0xCA, 0x56, 0x74, 0xF4, 0x6E, 0x3B, 0x7A, 0x0C, 0x98, 0x88, 0x09, 0x0E, 0x4D,
	0x3F, 0x24, 0xFD, 0x8F, 0x66, 0xCF, 0xDC, 0x64, 0x00, 0x0F, 0xB2, 0xCF, 0x11, 0xE6, 0x80, 0xD5, 0x9E, 0x5A, 0x4C,
	0x78, 0xAA, 0x6F, 0x19, 0xBE, 0x39, 0x27, 0xEB, 0xAA, 0x4F, 0x88, 0xC7, 0x41, 0xF1, 0x95, 0xAF, 0x86, 0x22, 0x53,
	0xA9, 0x7D, 0xE6, 0xC4, 0xB9, 0x2A, 0x42, 0xEE, 0xE1, 0x91, 0x38, 0xD4, 0x27, 0xB7, 0xCE, 0x7B, 0x8E, 0x9F, 0x08,
	0xE5, 0x1B, 0x4E, 0xE8, 0x18, 0xD0, 0xC6, 0x74, 0x18, 0xB3, 0x0D, 0xAF, 0xE7, 0xC7, 0x26, 0x9D, 0x8B, 0x11, 0x16,
	0x43, 0x07, 0x94, 0xDF, 0xA4, 0x5F, 0x54, 0x87, 0xC4, 0x98, 0x55, 0x11, 0xA7, 0xB5, 0x9B, 0x82, 0x52, 0xBA, 0x2B,
	0xDD, 0xC8, 0xAB, 0x08, 0x25, 0x0D, 0x8D, 0x36, 0x61, 0x25, 0x62, 0xBA, 0x92, 0x15, 0x31, 0x97, 0xBE, 0xE0, 0xFB,
	0xD1, 0xE8, 0x8A, 0xC6, 0x6C, 0x14, 0x18, 0x95, 0x6D, 0x47, 0x8D, 0x6C, 0xD7, 0x84, 0xED, 0x4F, 0xAE, 0xCF, 0x3C,
	0x43, 0xF7, 0x2C, 0x7E, 0x4B, 0xB4, 0xA0, 0xB8, 0x6B, 0xEB, 0x2E, 0xED, 0xA8, 0x9F, 0xDA, 0x22, 0x05, 0xD5, 0xA8,
	0x59, 0x86, 0x90, 0x9D, 0x98, 0x2F, 0xD4, 0xBC, 0xE2, 0x05, 0xA5, 0x09, 0x3C, 0x0B, 0x08, 0x89, 0xA9, 0x45, 0xFF,
	0x3F, 0x2C, 0xB7, 0x90, 0x2F, 0xCC, 0x66, 0xBF, 0x5D, 0x8A, 0x55, 0x8E, 0xCD, 0x6C, 0x88, 0x03, 0x84, 0x75, 0x03,
	0x21, 0x85, 0xA9, 0xCB, 0xED, 0xD5, 0x0D, 0xE3, 0x6A, 0x76, 0xA4, 0x4F, 0x9B, 0x6E, 0x72, 0x14, 0x87, 0xC0, 0x7B,
	0x35, 0x2F, 0x71, 0xC4, 0xB6, 0x99, 0x84, 0x50, 0x9B, 0xC8, 0xFC, 0x23, 0xE9, 0xC0, 0xE0, 0x41, 0xA2, 0x86, 0x31,
	0xAF, 0xCD, 0x1D, 0xF5, 0x70, 0x6B, 0x89, 0x2F, 0x88, 0x82, 0xCE, 0xE3, 0xFB, 0x14, 0xF1, 0x16, 0xCE, 0x28, 0xF4,
	0xCB, 0x04, 0xBF, 0xDE, 0x06, 0xA1, 0xDF, 0xB0, 0xCB, 0xAA, 0x8B, 0x70, 0x1F, 0x22, 0xC7, 0x21, 0x04, 0x0D, 0x98,
	0xC7, 0x81, 0x6F, 0x00, 0x66, 0x97, 0x4D, 0x05, 0x03, 0x4C, 0xAA, 0xAB, 0xA1, 0xA3, 0x8A, 0xF4, 0x44, 0xA0, 0xF1,
	0xE6, 0xF1, 0x47, 0xE4, 0x84, 0xAB, 0x9D, 0x66, 0xD2, 0x76, 0xA5, 0x7B, 0xD5, 0x56, 0x63, 0x27, 0x90, 0x4F, 0xDC,
	0x6F, 0x07, 0x66, 0x13, 0x56, 0x3F, 0x9E, 0x0C, 0xE0, 0x3A, 0xFC, 0xCB, 0x12, 0xFE, 0x83, 0x55, 0xEF, 0x8E, 0x36,
	0xAC, 0x7B, 0xEF, 0x1C, 0xD7, 0xBA, 0x24, 0x36, 0xD7, 0xB0, 0x31, 0x8A, 0xB2, 0x62, 0x1A, 0x1B, 0x6B, 0xD3, 0xE4,
	0xED, 0x06, 0x08, 0x91, 0x04, 0x87, 0x03, 0x27, 0x65, 0xF3, 0xCA, 0xAA, 0x13, 0x4D, 0x61, 0x1C, 0x13, 0x99, 0xCA,
	0x83, 0x67, 0xDC, 0x0B, 0xE2, 0x15, 0x18, 0x27, 0x3E, 0x20, 0x53, 0x22, 0x9A, 0x8D, 0x91, 0x00, 0xFA, 0x5E, 0xD4,
	0xC6, 0x62, 0x99, 0x22, 0x77, 0xD6, 0x41, 0x7E, 0x18, 0x5B, 0xED, 0xAB, 0xF4, 0xE9, 0x71, 0x36, 0xA5, 0xF1, 0x10,
	0xBC, 0x73, 0x77, 0xCD, 0x41, 0x61, 0x7D, 0xAD, 0xCA, 0x73, 0x09, 0xB3, 0x5A, 0xAD, 0x1E, 0xE2, 0xF5, 0x14, 0xC0,
	0x41, 0x9F, 0xAA, 0xF4, 0xD1, 0x5D, 0x76, 0xBC, 0x98, 0x32, 0x79, 0x1F, 0x99, 0x22, 0xB9, 0x1E, 0xD8, 0x32, 0x39,
	0xBF, 0x5A, 0x65, 0xFD, 0x04, 0x22, 0xBF, 0x09, 0xF4, 0x34, 0x44, 0x62, 0x90, 0x94, 0xF8, 0x0B, 0xDE, 0x47, 0xE0,
	0x08, 0xE1, 0x50, 0xFF, 0x5E, 0x9D, 0xB3, 0x5A, 0x0F, 0x16, 0x74, 0xF3, 0x22, 0x51, 0x98, 0xD0, 0x98, 0x51, 0x22,
	0xF4, 0x76, 0x1A, 0x16, 0x64, 0xC1, 0xB1, 0x79, 0x22, 0x7C, 0x19, 0x4D, 0x34, 0xAC, 0x56, 0x98, 0x9E, 0x53, 0x6C,
	0x5E, 0x62, 0x77, 0x60, 0xA1, 0x86, 0x1C, 0x35, 0x67, 0x0D, 0x44, 0xEF, 0xB3, 0xFB, 0xF5, 0x92, 0x89, 0x55, 0x32,
	0x23, 0xEE, 0x1D, 0xFF, 0xA5, 0xE5, 0x59, 0x60, 0x1C, 0x72, 0x0D, 0x5A, 0x8C, 0x99, 0x3B, 0xF0, 0xFA, 0x5F, 0xE9,
	0x26, 0x69, 0xC7, 0x1A, 0x01, 0xDD, 0xD5, 0xD3, 0x84, 0x5B, 0x8E, 0x16, 0xB3, 0xE6, 0xF4, 0xE9, 0x92, 0x82, 0x0D,
	0x4F, 0x26, 0x33, 0xDD, 0x4D, 0x72, 0xFE, 0x66, 0xE6, 0x7A, 0xE5, 0xAE, 0x1E, 0x42, 0xEF, 0xB8, 0xF9, 0xCF, 0x1D,
	0x88, 0x7B, 0x24, 0x75, 0x23, 0xA9, 0x45, 0xFA, 0x8C, 0x86, 0x37, 0xB0, 0xC7, 0x17, 0xFD, 0x9B, 0xD8, 0x5E, 0x9B,
	0xC0, 0xC4, 0x61, 0x15, 0x22, 0x8E, 0x23, 0x6F, 0xC5, 0x3A, 0xA8, 0xAE, 0xCD, 0xF5, 0xD5, 0xDF, 0x49, 0x0D, 0xE9,
	0x5E, 0xB4, 0xF4, 0xEC, 0x2F, 0x11, 0xAF, 0xE4, 0x54, 0x65, 0x40, 0xD4, 0xD3, 0xB3, 0xAD, 0xC1, 0xAF, 0xFF, 0xFA,
	0xAD, 0xED, 0x4D, 0x29, 0x9E, 0x8F, 0xA2, 0x40, 0x98, 0x9B, 0x01, 0x42, 0x9D, 0x14, 0x6E, 0x33, 0xB3, 0xFF, 0xED,
	0x18, 0xDD, 0x5E, 0x83, 0xF4, 0x1F, 0x37, 0x33, 0xCB, 0x7E, 0x8E, 0x01, 0xA1, 0xFC, 0x65, 0xF1, 0x7B, 0xA0, 0xC2,
	0x08, 0x5C, 0x6B, 0xA8, 0x49, 0x48, 0x62, 0x1B, 0xB8, 0x43, 0x8A, 0x20, 0x5A, 0x52, 0xE6, 0xBA, 0x31, 0x78, 0x7B,
	0xED, 0x43, 0xB9, 0x4B, 0xBD, 0x94, 0x19, 0x5C, 0x2F, 0x26, 0x9D, 0xB2, 0x46, 0xFF, 0x48, 0x4F, 0x06, 0x22, 0x1E,
	0x39, 0x73, 0x94, 0x24, 0x73, 0x92, 0x57, 0x5D, 0x01, 0x66, 0x71, 0xCD, 0xE8, 0xF3, 0xE5, 0x78, 0x2A, 0x3D, 0xB8,
	0x63, 0xCD, 0x49, 0xEC, 0x91, 0xD5, 0x1A, 0x87, 0x06, 0x44, 0xB4, 0x8C, 0xC6, 0x20, 0x1C, 0x00, 0xD6, 0x6C, 0x55,
	0xE6, 0x39, 0x2D, 0x63, 0x42, 0xF3, 0x65, 0x4A, 0x18, 0x09, 0x1A, 0x0F, 0x6D, 0x7D, 0x4F, 0xB5, 0x43, 0x55, 0x09,
	0x40, 0xA0, 0x95, 0x4B, 0xB4, 0x88, 0x3F, 0x19, 0x16, 0xFD, 0x59, 0x77, 0x69, 0x05, 0xE6, 0x69, 0xB1, 0xA3, 0xEA,
	0xF4, 0xF2, 0xDC, 0x6A, 0x1B, 0x31, 0xB2, 0x69, 0xE2, 0x71, 0x2B, 0xEB, 0x4E, 0xB6, 0x4B, 0xF4, 0x62, 0x05, 0x14,
	0x89, 0x22, 0x61, 0x8C, 0xAD, 0x92, 0xCE, 0xB6, 0x64, 0xB7, 0x50, 0x96, 0xB3, 0x94, 0xEC, 0x31, 0x9C, 0x2D, 0xA5,
	0x89, 0x25, 0x86, 0x7F, 0xA4, 0x52, 0xA4, 0x7E, 0x86, 0x25, 0x8A, 0xA7, 0x31, 0xA4, 0x3C, 0xFD, 0xAB, 0xD2, 0xBF,
	0x84, 0xF7, 0xB3, 0x15, 0x40, 0x1A, 0x4C, 0x45, 0x36, 0x16, 0xA0, 0x50, 0x69, 0xF1, 0xB3, 0x3B, 0xDD, 0xAE, 0x89,
	0x0B, 0x97, 0x52, 0x27, 0xC3, 0x9A, 0xE0, 0x90, 0x68, 0xEA, 0x5C, 0xC8, 0xFC, 0x8B, 0xCA, 0xD3, 0x85, 0x81, 0x2E,
	0xB6, 0x06, 0xD1, 0x8D, 0x74, 0x84, 0x7E, 0xEA, 0x11, 0x01, 0x8D, 0x4A, 0x92, 0x83, 0x00, 0xAF, 0xF9, 0x0D, 0xDD,
	0x1F, 0x4C, 0xA4, 0x27, 0x9D, 0x8F, 0x4B, 0xE3, 0x2D, 0xC4, 0x06, 0x14, 0xD4, 0xF1, 0xD9, 0xBE, 0x95, 0x19, 0xC9,
	0xE5, 0x74, 0x41, 0xD8, 0x8D, 0x76, 0x6B, 0x0C, 0xBB, 0x9D, 0x69, 0x72, 0xEF, 0xDA, 0xF1, 0xB6, 0x6F, 0x27, 0xAA,
	0x8C, 0x22, 0x86, 0x97, 0xF7, 0x0B, 0xFD, 0xBD, 0xFB, 0x2E, 0x90, 0x1E, 0x9C, 0x8F, 0x41, 0xC0, 0xDF, 0x33, 0x16,
	0xA6, 0xC7, 0x1C, 0x12, 0xD5, 0x58, 0x51, 0x39, 0x50, 0x96, 0xD3, 0x90, 0x1B, 0x86, 0xA8, 0x19, 0x3A, 0x2B, 0xD2,
	0xDB, 0xB1, 0x89, 0x58, 0xD7, 0x85, 0xA5, 0x3B, 0x13, 0xB9, 0x81, 0x91, 0x52, 0x23, 0x2D, 0x58, 0x52, 0x8F, 0x43,
	0x69, 0xBF, 0xC7, 0xCA, 0x9C, 0xD1, 0xBE, 0x7E, 0xEE, 0xB0, 0x2B, 0x89, 0xB7, 0x68, 0x12, 0xEF, 0xFD, 0xFE, 0x78,
	0xB5, 0xC3, 0x75, 0x60, 0xDE, 0x0E, 0xD1, 0xCE, 0x6E, 0xE0, 0x16, 0xC6, 0x6A, 0x3F, 0x49, 0x4D, 0xD5, 0x2F, 0x6D,
	0x66, 0xB3, 0xB2, 0x86, 0x15, 0x08, 0xCE, 0x99, 0x5E, 0xD9, 0x86, 0xA8, 0x46, 0x28, 0xDE, 0xB9, 0xD0, 0xFC, 0xDB,
	0xD0, 0x00, 0x56, 0x80, 0xEF, 0xDA, 0x3C, 0xD1, 0x1C, 0x63, 0xB1, 0xD2, 0x5A, 0x9E, 0xB9, 0x88, 0xAD, 0x8F, 0x58,
	0xF6, 0x1A, 0x3B, 0x93, 0x20, 0xA4, 0xA5, 0x6D, 0x0A, 0x4F, 0xD1, 0xEA, 0xB9, 0x1F, 0xC3, 0x0F, 0x30, 0x19, 0x80,
	0xDE, 0x73, 0x40, 0x0B, 0x5D, 0x87, 0x98, 0x68, 0x90, 0x6E, 0x25, 0x9B, 0x79, 0x2E, 0xEC, 0xA9, 0x1E, 0xCB, 0xF0,
	0x95, 0x82, 0x47, 0x35, 0x63, 0xAA, 0xA8, 0xC0, 0x17, 0x98, 0xF1, 0x94, 0xB6, 0x52, 0x26, 0xB5, 0x43
};

###Algorithme de cryptage

void ToggleEncryption (unsigned char *wda_data, int wda_data_size)
{
	// Algorithme de cryptage, version C. Parcourt tout le buffer wda_data sur wda_data_size
	// octets et masque ou démasque l'encryption des données sur celui-ci.

	register int i; // Variables register = internes au CPU, leur utilisation est plus rapide

	// Pour chaque octet de wda_data jusqu'à wda_data_size...
	for (i = 0; i < wda_data_size; i++)
		wda_data[i] ^= key[i % 3418]; // Ou exclusif avec la clé par blocs de 3418 octets

	return; // aussi simple que ça :)
}
Clone this wiki locally