Make fait partie de la distribution standard de djgpp, dans le fichier
v2gnu/mak*b.zip (quel que soit le dernier numéro de version).
Vous pouvez le récupérer à partir de
http://www.delorie.com/djgpp/.
Etes-vous sûr d'avoir installé djgpp correctement ? Vérifiez les
instructions dans le fichier readme.1st de DJGPP et en particulier
vérifiez que vous avez défini la variable d'environnement DJGPP et ajouté
le répertoire
djgpp\bin à la variable d'environnement PATH.
Etes-vous sûr de bien utiliser le programme make de GNU et pas une autre
version comme celle de Borland ? En cas de doute, tapez
make -v et
vérifiez que le message de copyright GNU s'affiche.
Vous ne devez pas lancer make à partir de l'explorateur de Windows !
Ouvrez une fenêtre DOS, allez dans votre répertoire Allegro et tapez
make sur la ligne de commande.
Etes-vous sûr que l'heure et la date système sont correctes ?
Vous avez aussi pu télécharger un fichier récent créé par quelqu'un qui
se trouve dans une zone horaire différente. Dans ce cas, vous pouvez
attendre quelques heures, avancer temporairement votre heure système ou
utiliser un utilitaire comme
touch pour changer l'heure des
fichiers.
Comme le message d'erreur l'indique, vous devez fournir plus de mémoire
au compilateur. Le programme go32-v2 vous indiquera la quantité
de mémoire disponible actuellement. Si vous êtes sous DOS, essayez de
libérer un peu plus d'espace disque pour l'utilisation comme fichier
d'échange. Si vous utilisez win95, augmentez la limite de mémoire DPMI
pour votre session DOS jusqu'à 65535 (vous allez devoir saisir cette
valeur à la main, parce que la liste déroulante ne va pas au delà de
16384).
Comme le message d'erreur le suggère, il y a un conflit entre des
versions récentes de gcc et des versions anciennes de la libc. Vous
devriez lire le fichier readme.DJGPP qui se trouve dans
l'archive gcc*b.zip (une correction est disponible à la fin de
ce fichier).
C:\TEMP\ccdaaaaa(.text+0x9):x.c: undefined reference to
`allegro_init'
C:\TEMP\ccdaaaaa(.text+0xe):x.c: undefined reference to
`install_keyboard'
Vous n'avez pas lu la doc, si ? :-) Vous devez lier votre programme
avec le fichier de la librairie liballeg.a. D'abord, assurez
vous que vous avez tout installé correctement (lancer make install
devrait faire ça pour vous). Ensuite, si vous compilez à partir de la
ligne de commande ou d'un makefile, ajoutez -lalleg à la fin de
votre ligne de commande gcc ou si vous utilisez Rhide, allez dans le menu
Options/Libraries, tapez alleg dans le premier champ vide et
assurez vous que la boîte juste à côté est cochée.
Non, désolé. Pour commencer, liballeg.a fait à peu près 450k,
mais vous voudrez aussi probablement divers utilitaires comme le grabber,
le setup, etc. Et pourquoi pas tous les programmes d'exemple ? Si on
inclut les versions compilées de l'ensemble, une distribution binaire
ferait plus de 7 Mo : beaucoup trop gros en pratique ! Plus sérieusement,
il n'y a aucune raison que vous ne la compiliez pas vous-même. La
compilation est un processus déterministe : avec un fichier d'entrée et
une ligne de commande donnés, la même sortie sera toujours produite. Si cela
ne marche pas, soit vous n'avez pas les bons fichiers d'entrée (ie. votre
copie d'Allegro a eu un problème quelconque), soit pas la bonne ligne de
commande (difficile de voir comment ça pourrait arriver, étant donné que
tout ce que vous avez à faire est de taper make...) ou votre
compilateur a un problème, ie. vous n'avez pas installé djgpp
correctement. Vous devez trouver et corriger le problème et pas juste le
balayer sous le tapis en faisant compiler Allegro par quelqu'un d'autre
pour vous...
Les outils GNU écrivent leurs messages d'erreur vers le canal d'erreur
standard, stderr. Malheureusement, command.com est trop
stupide pour savoir comment les rediriger, mais heureusement DJ a été
assez astucieux pour corriger ça. Vous pouvez utiliser son programme
redir pour capturer les messages de sortie, par exemple
redir -eo make > logfile.txt
C'est variable. Certaines personnes ont rapporté des problèmes, alors que
d'autres disent que ça marche bien. Utilisez la version Windows d'Allegro
si vous voulez créer des programmes Windows. Si vous voulez lancer des
programmes DOS, utilisez DOS !
Oui, mais avec un peu de paramétrage. Si vous utilisez la version OpenDOS
de EMM386, vous devez désactiver leur implémentation DPMI (spécifiez
DPMI=OFF dans la ligne device EMM386.EXE de votre
config.sys). Vous devez aussi vous assurer que l'option PIC=OFF
est active, mais c'est le cas par défaut donc ce ne sera pas un
problème si vous ne l'avez pas spécifiquement modifiée.
Vous ne pouvez pas. Cette limite est imposée par le matériel VGA, pas par
Allegro. Pour accéder à plus de 256 Ko de mémoire vidéo vous devez
utiliser un mode SVGA, ce qui veut dire soit choisir une résolution plus
élevée, soit récupérer une copie de SciTech Display Doctor, qui fournit
plusieurs modes SVGA en basse résolution.
Cela marche pour certains, mais pour d'autres pas. Le problème est que
Creative Labs refuse de fournir ses spécifications, donc nous ne savons
pas comment écrire un pilote pour cette carte. Plaignez-vous directement
à eux ou achetez une autre carte chez un revendeur plus raisonnable.
Cela peut être dû au fait que vous avez réglé le volume à un niveau très
bas : essayez de le changer dans le programme de setup. Allegro mixe
plusieurs sons en un seul tampon de sortie, contrairement au lecteur de
sons de Windows qui ne joue qu'un échantillon à la fois, donc chaque son
individuel ne peut utiliser qu'un petit pourcentage du volume total de
sortie. C'est juste le prix à payer pour avoir plusieurs canaux de sortie.
Si cela ne vous plaît pas, utilisez le programme de setup pour changer le
nombre de canaux : cela peut être n'importe quelle puissance de deux
inférieure ou égale à 64 et plus ce nombre sera petit, plus le son sera
fort. Vous pouvez aussi utiliser la fonction
set_volume_per_voice() décrite dans la documentation. Cela
vous permettra d'ajuster le volume général de la sortie sonore digitale
d'Allegro.
Essayez d'utiliser un pilote FreeBE/AF (http://www.talula.demon.co.uk/freebe/)
ou le produit commercial SciTech Display Doctor (http://www.scitechsoft.com).
Si cela ne marche toujours pas, postez une description de votre problème sur
la liste de diffusion Allegro, avec une copie de la sortie de l'exécution
des programmes afinfo et vesainfo.
L'interface VBE/AF supporte déjà ce système pour les pilotes vidéo :
jetez un oeil au projet FreeBE/AF à http://www.talula.demon.co.uk/freebe/.
Pour des choses plus générales comme le son, VESA et les routines en
mode-X, ce serait assez difficile à faire car les pilotes dépendent d'un
tas de fonctions de la librairie de base. Le format djgpp DXE n'est pas
assez flexible pour permettre ce genre de choses et nous ne voulons pas
rendre Allegro dépendant d'autres paquets de librairies dynamiques.
Oui, euh, vous devez augmenter la taille de votre environnement alors :-)
Vous pouvez le faire en modifiant le paramétrage de votre boîte DOS
(cliquez sur le menu Système et sélectionnez Propriétés) ou au démarrage
dans votre fichier config.sys (eg. shell=c:\command.com /e:8192 /p).
Oui, euh, vous devez augmenter la taille de votre environnement alors :-)
Vous pouvez le faire en modifiant le paramétrage de votre boîte DOS
(cliquez sur le menu Système et sélectionnez Propriétés) ou au démarrage
dans votre fichier config.sys (eg. shell=c:\command.com /e:8192 /p).
Assurez-vous que vous n'avez pas un point-virgule à la fin de votre
variable MSVCDIR si vous utilisez MSVC, de votre variable MINGDIR si
vous utilisez Mingw32 ou de votre variable BCC32DIR si vous utilisez BCC.
Aussi, tapez make -v à partir de la ligne de commande et
vérifiez que vous utilisez bien le make de GNU et pas celui de Borland ou
Microsoft.
Vous devez dire à votre compilateur comment trouver les fichiers
d'inclusion et les librairies de DirectX : mettez les chemins des
répertoires /include et /lib du SDK DirectX dans le
chemin du compilateur/linker. Si vous ne voulez pas modifier votre
configuration, vous pouvez simplement copier les fichiers des
répertoires /include et /lib du SDK DirectX dans ceux
correspondant à votre compilateur.
Vous devez installer une version plus récente du SDK DirectX, au moins
la version 5, que vous pouvez trouver sur le site des développeurs
Microsoft.
Si un anti-virus (Norton ou McAfee par exemple) tourne en tâche de fond
sur votre ordinateur, essayez de le désactiver temporairement.
Vous devez écrire END_OF_MAIN() juste après votre fonction
main(). Allegro l'utilise, avec quelques commandes du
préprocesseur, pour transformer une fonction main() normale
en un point d'entrée Windows WinMain().
Assurez-vous que vous construisez une application Windows GUI et pas une
application Windows Console. C'est une option quand vous créez un projet
avec MSVC ou Borland C++ Builder. Elle est spécifiée par l'option -tW
pour le compilateur Borland C++ en ligne de commande ou par -subsystem:console
pour le linker MSVC. Sinon définissez le symbole du préprocesseur ALLEGRO_USE_CONSOLE
avant d'inclure les en-têtes d'Allegro si vous avez vraiment besoin de la
console pour votre programme.
Si votre programme inclut directement des en-têtes de l'API Win32, lisez
la section de la documentation spécifique à Windows.
Si votre programme inclut seulement des en-têtes de la librairie
standard C++, vous essayez très probablement de le compiler avec gcc 3.x
pour Mingw32 ; dans ce cas, définissez le symbole __GTHREAD_HIDE_WIN32API
sur la ligne de commande du compilateur :
g++ -D__GTHREAD_HIDE_WIN32API program.cpp -lalleg
Désactivez la mise à jour directe pour le pilote DirectX fenêtré en
utilisant la variable de configuration dédiée. Lisez la section
concernant les routines de configuration dans la documentation et le
fichier d'exemple allegro.cfg pour plus d'information.
Désactivez la mise à jour directe pour le pilote DirectX fenêtré en
utilisant la variable de configuration dédiée. Lisez la section
concernant les routines de configuration dans la documentation et le
fichier d'exemple allegro.cfg pour plus d'information.
Le grabber doit être lié avec le code de datedit.c. Mais
vous n'avez pas à la faire à la main : lancez seulement make
et tout se compilera automatiquement.
Vous devez mettre à jour votre version des GNU binutils. Lisez readme.txt
pour déterminer la version minimale requise.
Pas tant que <foobar> n'est pas mentionné dans le readme.txt comme
étant une plate-forme supportée. Vous pouvez le porter vous-même, mais
ça nécessite généralement un travail important. Si <foobar> est un
compilateur DOS 16 bits comme Borland C, vous feriez mieux de carrément
oublier cette idée :-)
WIP signifie "work in progress" ou "version en cours de développement" et
fait référence à tous les changements qui sont plus récents que la
dernière distribution officielle. Les versions WIP de la libraire sont
disponibles sous forme de patches à partir du site d'Allegro
(http://alleg.sourceforge.net/) et sont généralement
assez stables, bien qu'évidemment pas aussi bien testées que des versions
stables.
Avez-vous une copie de patch.exe ? Si ce n'est pas le cas, récupérez le
à partir du même endroit que celui où vous avez récupéré le reste de
djgpp : c'est un outil standard de la distribution du compilateur. Vous
pouvez trouver la version compilée avec Mingw depuis http://sourceforge.net/projects/gnuwin32/
Si vous avez le programme patch mais qu'il ne fonctionne pas correctement,
assurez vous que vous installez le patch sur une copie non modifiée de la
version d'Allegro que vous voulez mettre à jour (ce sera généralement la
version officielle la plus récente avant que les WIP existent, mais
vérifiez dans le fichier texte que vous trouverez dans la WIP pour être
sûr).
Ce fichier est distribué séparément dans les versions WIP. Il est ici :
http://alleg.sourceforge.net/wip.html. (alldata.zip)
C'est simplement de cette façon que fonctionne le matériel vidéo : il ne
peut y avoir qu'une palette utilisée à un moment donné. Essayez soit de
convertir vos images pour qu'elles utilisent toutes la même palette, soit
de changer votre mode graphique vers un mode truecolor.
Allez sur le site Allegro.cc (http://allegro.cc/) pour trouver
quelques utilitaires comme par exemple FixPal et Smacker.
Le matériel VGA utilise seulement 6 bits pour chaque composante de
couleur, ce qui signifie que les valeurs de rouge, vert et bleu dans la
palette vont de 0 à 63 et pas jusqu'à 255. Cela vous donne un accès
théorique à 2^18 = 262144 couleurs différentes ou 64 niveaux de gris. Si
vous en voulez plus vous pouvez essayer d'utiliser la fonction VESA 0x4F08
pour sélectionner un DAC de 8 bits, mais Allegro ne le supporte pas
directement et je ne sais pas à quel point c'est fiable sur différents
matériels.
Quand vous êtes dans un mode 256 couleurs, la carte VGA affiche la couleur
#0 autour de la bordure de la zone d'affichage (dans les modes truecolor
ça affiche du noir). Votre couleur bizarre disparaîtra si vous modifiez la
palette pour que la couleur #0 soit le noir.
Avec beaucoup de difficultés :-) Il n'y a pas d'astuce aussi simple que de
juste modifier la palette, donc vous devrez redessiner l'image plusieurs
fois sous une forme plus claire ou plus foncée. Vous pourriez dessiner des
rectangles noirs translucides par dessus l'écran pour l'assombrir ou
utiliser draw_lit_sprite() pour teinter un bitmap pendant
que vous le copiez vers l'écran, mais sachez que ces opérations sont
lourdes et nécessitent un PC rapide !
Vous pouvez aussi regarder sur http://www.allegro.cc/ pour des
paquets additionnels (notamment FBlend v0.5) permettant d'effectuer cette
opération aussi vite que possible.
fade_in() et fade_out() ne fonctionnent que
dans les modes 8 bits avec palette. Lisez les questions précédentes pour
plus de détails.
Consultez le site Allegro.cc (http://allegro.cc/) pour trouver
quelques utilitaires, comme par exemple DTA et Smacker. Vous pouvez aussi
utiliser ASE (Allegro Sprite Editor, http://ase.sourceforge.net/),
qui permet de dessiner/éditer chaque frame de l'animation et de la sauver
au format FLI. Ou vous pouvez utiliser The GIMP (http://www.gimp.org/)
avec son plugin GFli, en utilisant les calques comme des frames et sauver
votre travail sous "fichier.fli". The Gimp vous permet également d'éditer
des fichiers FLI existants.
Dans votre programme de dessin favori, modifiez la couleur en mode RVB
en faisant en sorte que les valeurs pour le rouge et le bleu soient au
maximum (généralement 255, mais ça dépend des unités utilisées par votre
logiciel) et que la valeur du vert soit à zéro. Le résultat est une
teinte spéciale de rose clair, qu'on appelle aussi magenta.
Rappelez-vous que les positions des sommets sont stockées dans le format
point fixe, donc vous devez utiliser la macro itofix() ou décaler vos
coordonnées de 16 bits vers la gauche.
Rappelez-vous que les angles de rotation sont stockées dans le format
point fixe, donc vous devez utiliser la macro itofix() ou décaler vos
coordonnées de 16 bits vers la gauche. Par exemple,
rotate_sprite(bmp, spr, x, y, itofix(32)) effectuera une rotation du
graphique de 45 degrés.
Vous essayez probablement d'initialiser la structure du dialogue avec un
pointeur sur votre bitmap, exact ? Cela ne marchera pas parce que le
dialogue est créé à la compilation, mais le bitmap est seulement chargé à
l'éxecution, donc le compilateur ne sait pas encore où il sera localisé.
Vous devez affecter un pointeur NULL à la structure du dialogue, puis
ensuite copier le pointeur réel du bitmap dans le champ dp lors de
l'initialisation de votre programme, après que vous ayez chargé le bitmap
en mémoire.
Cela dépend de ce que vous faites exactement. Si vos images sont
complètement opaques, il n'y a aucun avantage à utiliser des sprites RLE
et ce sera probablement plus rapide d'utiliser des bitmaps classiques avec
la fonction blit(). Si vos graphiques contiennent des zones masquées, un
sprite RLE sera presque toujours plus petit et plus rapide que la fonction
draw_sprite(). Les sprites compilés sont en général plus rapides que les
deux autres pour les images masquées et un peu plus rapides pour les
images opaques, mais c'est beaucoup plus variable. Ils sont plus efficaces
avec des petits sprites, sur des machines plus anciennes et en mode-X et
peuvent être plus lents que blit() quand vous utilisez les modes SVGA sur
un Pentium (la grande taille des sprites compilés est très mauvaise pour
la performance du cache).
Vous devez vous assurer que la logique du jeu est mise à jour à un rythme
régulier, mais sauter le rafraîchissement écran de temps en temps si
l'ordinateur est trop lent pour suivre. Cela peut être fait en installant un
compteur de temps qui va incrémenter une variable globale à la vitesse
de la logique de votre jeu, c'est-à-dire :
volatile int speed_counter = 0;
void increment_speed_counter()
{
speed_counter++;
}
END_OF_FUNCTION(increment_speed_counter);
void play_the_game()
{
LOCK_VARIABLE(speed_counter);
LOCK_FUNCTION(increment_speed_counter);
install_int_ex(increment_speed_counter, BPS_TO_TIMER(60));
while (!game_over) {
while (speed_counter > 0) {
update_game_logic();
speed_counter--;
}
update_display();
}
}
Ajoutez un appel à save_bitmap() quelque part dans votre code. Lisez la
documentation de save_bitmap() pour une discussion sur un piège classique
dans ce type d'utilisation et exemple de code.
Appelez srand(time(NULL)) au début de votre programme et utilisez ensuite
rand()%limite pour obtenir un nombre pseudo-aléatoire entre 0 and limite-1.
Il n'y en a pas besoin. Le linker va uniquement inclure les parties de la
librairie que vous utilisez effectivement, donc si vous n'utilisez aucune
des routines de texture mapping ou d'affichage de FLIC par exemple, elles
ne seront pas intégrées à votre exécutable. Ca ne marche pas parfaitement
parce qu'une grande partie du code d'Allegro utilise des pointeurs sur des
tables de fonctions qui font que certaines routines non nécessaires sont
liées, donc la majorité des fonctions graphiques seront intégrées dans
chaque exécutable, mais j'ai essayé de le réduire au minimum. Lisez
allegro.txt pour avoir des informations sur des moyens plus précis
d'enlever quelques pilotes graphiques et sonores.
Non. Je pense que cette sorte de support matériel serait plus utile dans
une vraie librairie 3D, ce qu'Allegro n'est pas et ne sera jamais. Si
vous voulez travailler là-dessus, la librairie MESA (une implémentation
libre d'OpenGL) est AMHA l'endroit où démarrer.
Cependant, si vous êtes intéressé par l'utilisation d'OpenGL pour le
graphisme et d'Allegro pour tout le reste, vous pouvez essayer les
différentes librairies additionnelles sur http://www.allegro.cc/
comme AllegroGL.
Il en existe déjà plusieurs qui sont très bien, par exemple les packages
JGMOD ou DUMB. Allez voir les librairies d'extension audio sur le site
Allegro.cc (http://allegro.cc/). Vous n'êtes pas
autorisé à suggérer que l'une de ces librairies soit intégrée à Allegro,
parce que ce sujet a déjà été abordé et abandonné dans la liste de
diffusion et que je suis fatigué d'en entendre parler.
Il existe déjà plusieurs packages réseau actuellement en
développement ou se balladant sur le net et à mon avis, ce genre de code
est plus utile en tant que librairie externe qu'il ne le serait en étant
intégré à Allegro.
Unisys dispose d'un brevet sur l'algorithme de compression LZW qui est
utilisé par le format GIF. Je veux que tout ce qui est dans Allegro soit
librement utilisable sans aucune restriction, ce qui veut dire que je ne
peux pas inclure un code breveté ou sujet au paiement de royalties.
Peut-être. Essayez d'isoler le plus petit fragment de code capable
de reproduire le problème et nous essayerons d'y jeter un oeil. Si vous
pouvez nous envoyer un programme de 10 lignes, nous le corrigerons.
100 lignes et nous pourrons probablement le corriger. 1000 lignes et
nous n'aurons aucune chance :-)
Bien sûr. Lisez les termes de la licence giftware dans le fichier
readme.txt. Vous pouvez faire ce que vous voulez avec et il
n'y a aucun problème pour un usage commercial.
Quand ce sera fait ! Un peu d'encouragement est toujours le bienvenu, mais
nous n'avons pas de contrainte de temps et nous n'allons pas nous en
imposer une pour vous :-) Dès que ce sera fini, se sera distribué.
Le grabber peut importer directement des polices de caractères GRX ou
BIOS au format .fnt ou vous pouvez les dessiner sur une image .pcx en utilisant
n'importe quel programme de dessin. Sur http://www.talula.demon.co.uk/ttf2pcx/
vous en trouverez un qui permet de convertir des polices de caractères
Windows au format TrueType vers le format .pcx.
Regardez les liens sur le site Allegro
(http://alleg.sourceforge.net/)
Vous pouvez utiliser des patches Gravis (format .pat) ou SoundFont 2.0
(format .sf2), mais ce dernier doit être converti vers un fichier
patches.dat avec l'utilitaire pat2dat.
Vous devez télécharger l'outil de conversion makertf
(http://www.giffer.com/public/win/pwflemgt/Files/MKRTF104.ZIP) et le compilateur
d'aide Windows (ftp://ftp.microsoft.com/Softlib/MSLFILES/HC505.EXE).
Créez un répertoire temporaire, copiez le fichier allegro.txi du
répertoire allegro/docs et lancez les commandes makertf --no-warn allegro.txi
-o allegro.rtf -J allegro.hpj suivi par hcp allegro.hpj. La seconde
commande affichera un tas d'avertissements, mais vous pouvez les ignorer.
Le fichier allegro.rtf peut être lu directement avec Microsoft Word et
imprimé à partir de là, mais vous devrez d'abord cliquer sur le bouton
droit de la souris et mettre à jour la table des matières et les champs
d'index pour les remplir avec les données correctes. Sinon, vous pouvez
installer le package TeX et utiliser les programmes tex et dvips pour
convertir allegro.txi vers le format Postscript.
Regardez sur le site Allegro.cc, http://allegro.cc/.
Si vous avez quoi que ce soit à y ajouter, s'il vous plaît envoyez
l'adresse !
Cela simplifie la maintenance de votre programme, au cas où la valeur de PI
aurait besoin d'être modifiée. Et puis cela rendra votre programme plus
portable pour d'autres compilateurs qui utilisent une autre valeur de PI.
Un certain nombre de cartes graphiques ont une implémentation boguée ou
incomplète de la norme VESA et souvent la fonction vsync()
n'est pas implémentée. Pour des exemples d'affichage sans artefacts,
regardez le code du jeu de démonstration, il utilise une grande variété
de méthodes pour l'affichage.
Si le code fonctionne sans optimisation, alors ça pourrait être la faute
du compilateur. Vous pouvez essayer de feinter le compilateur, par
exemple :
while (!key[KEY_ENTER])
yield_timeslice();
Dans ce cas, toutefois, ce serait mieux d'utiliser readkey().
Ou envisager de passer à une version plus récente/plus ancienne de votre
compilateur.
Voir http://alleg.sourceforge.net/maillist.html.