Lecture d'un fichier pak utiliser dans quake

Soyez le premier à donner votre avis sur cette source.

Vue 7 138 fois - Téléchargée 172 fois

Description

DECOMPRESSER LE FICHIER TEST.PAK SUR C:\

ce programme vous donne la liste des fichier present dans un fichier pak
sa marche pour quake et quake 2 j'ai pas essayer avec quake 3
cinon pour extraire les fichier chercher un peux s'est pas compliquer ;)

Source / Exemple :


#include <iostream.h>
#include <stdio.h>

struct PAK_HEADER
{
	unsigned int  Offset;
	unsigned int  Length;
};

struct PAK_FILE 
{
	char 			Titel[56];
	unsigned int 	Offset;
	unsigned int	Length;
};

typedef unsigned char* BYTEADD;
unsigned int m_NumberOfFiles, m_CurrentFileLength;

int main()
{
	PAK_HEADER	pakH;
	PAK_FILE	*pakF;
	FILE *mFile;

	// recherche les fichies present dans le pak

	mFile = fopen("c:\\test.pak", "rb");

	if(  mFile == 0 )
		return false;

	if( fseek( mFile, 4, SEEK_SET ) )
		return false;
	
	if( ! fread( &pakH, sizeof( pakH ), 1, mFile )  )
		return false;
	
	m_NumberOfFiles = pakH.Length/ 64;

	cout << "nombre de fichier dans le PAK : " << m_NumberOfFiles;

	pakF = new PAK_FILE[ m_NumberOfFiles ];
	
	if( fseek( mFile, pakH.Offset, SEEK_SET ) )
		return false;
		
	if( ! fread( pakF, pakH.Length , 1, mFile ) )
		return false;

	// affiche les fichier trouver avec leur taille et leur position
	unsigned int count;

	for(count =0; count <= (m_NumberOfFiles - 1); count++)
	{
		cout << "\n" 
			 << count 
			 << ": " 
			 << pakF[count].Titel
			 << " demarre a l'offset : " 
			 << pakF[count].Offset
			 << " et mesure : "
			 << pakF[count].Length
			 << " bytes";
	}

	cout << "\n\n";
	fclose(mFile);

	return 0;
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cyfive
Messages postés
14
Date d'inscription
vendredi 28 juillet 2006
Statut
Membre
Dernière intervention
10 août 2006
-
Désolé, je viens de remarquer que tu commencais à l'offset 4 dans ton code. De plus, ce sont 4 octets qui forment l'identité du fichier. En effet ce sont les lettres "PACK".

J'ai pu voir qu'il y avait 10 fichiers dans ce pack. Maintenant, tout marche. Mais, le seul hic, c'est que si les répertoires inscrits dans les noms des fichiers du pack n'existe pas rien ne sera fait pour le fichier en question. Donc, il faut s'assurer avant tout que les répertoires existent et si non les créer.

Je vais mettre la source de ma classe sur le forum sous peu. :)
cyfive
Messages postés
14
Date d'inscription
vendredi 28 juillet 2006
Statut
Membre
Dernière intervention
10 août 2006
-
J'ai fini ma classe, mais je ne peux pas extraire les fichiers de ton pak. La raison est simple, la structure de l'en-tête réelle est:

struct PACK_HEADER
{
unsigned int ident;
unsigned int dirofs;
unsigned int dirlen;
};

En effet, la structure des répertoire est conservée.

Si y a des intéressé, ma classe crée/lit/extrait des fichiers pak mais en utilisant la structure de zorque et non la vrai. Ca peut être pratique si vous garder tout dans un répertoire et en plus vous pouvez soit extraire en mémoire ou sur le disque dur.

Adresse de la vraie structure(en VB): http://francis.dupont.free.fr/coindev/direct3d/pak.htm
cyfive
Messages postés
14
Date d'inscription
vendredi 28 juillet 2006
Statut
Membre
Dernière intervention
10 août 2006
-
Je trouve ta source très bien zorque.
C'est pourquoi j'ai décidé de faire une classe(objet)
permettant de lire/créer des fichiers pak.
Toutefois, n'étant pas adepte des produits de programmation
Microsoft je vais le faire avec Borland C++ Builder.
cs_Clem
Messages postés
282
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
12 février 2007
-
faudrait sortir une classe pour les pak ;)
sinon, ceux de quake 3 c'est des "pk3", en fait de simples zip renomés.
si ça interesse quelqu'un dans nexuiz (==> google.fr. c'est un fps open source dans le genre quake 3) il y a un exemple complet vu que ce jeu les lis, c'est dans fs.c, rien de bien compliqué (enfin bien plus que lire un simple pak, y a plus d'un millier de lignes de code, et encore sans compter la zlib)
dindin2000
Messages postés
2
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
3 août 2003
-
hein ? Qu'est ce que tu dis Plex ? J'ai pas compris ? Moi aussi je voudrais savoir comment on fait un pak :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.