|
| [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 | |
| |
Auteur | Message |
---|
admin Team Open Consoles
Messages : 15193 Réputation : 399 Inscrit le : 13/10/2010
| Msg n°1 Sujet: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Lun 20 Juin 2011, 21:36 | |
| Voici un mail que j'ai envoyé à Zx car il est LE développeur phare sur Caanoo (eh oui, il a beau être modeste, c'est la vérité ). Je pense que le sujet est intéressant parce que beaucoup d'entre nous doivent se poser des questions identiques. C'est pour ça qu'on passera par le fofo pour avoir des réponses. Ce topic est ouvert à tous ceux qui veulent en débattre afin de faire avancer le schmiliblick - Citation :
J'aurais besoin de conseils si tu as un peu de temps à m'accorder.
J'aimerais tenter de porter quelques jeux ou autre sur la Caanoo mais je ne suis pas sûr de savoir par quoi commencer.
Ce que je fais depuis quelques temps, c'est apprendre le C via le site du zéro (les tutos sont super) et je chine des infos par ci par là.
De ce que je comprends, il faut avoir les sources d'un jeu ou d'un émul pour pouvoir le porter. Puis voir si le langage utilisé est compatible avec la Caanoo (comment faire pour le savoir ?) et si les libraries sont compatibles aussi.
Tournant sous Windows, cela posera t il des problèmes ? Sinon, j'ai un Linux en virtuel.
Peux tu m'expliquer brièvement les points clés pour y arriver ? Voilà, en attendant vos réponses, merci aux âmes charitables
Dernière édition par BAFelton le Jeu 30 Juin 2011, 22:57, édité 2 fois |
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| Msg n°2 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mar 21 Juin 2011, 08:37 | |
| Salut Baf, Tout d'abord pour developper sur la caanoo, il te faut un SDK (Software Development Kit) qui tourne sur ton PC. Perso, j'utilise un PC Linux sous Ubuntu avec le SDK disponible sur le site dl.openhandhelds.org. Je ne connais pas le SDK pour windows, donc je ne peux pas trop aider sur ce sujet. On peut aussi utiliser virtual box + Linux ubuntu et installer le SDK sur la machine virtuelle de virtual box. Le portage d'un jeu ou d'un petit programme C/C++ sur la caanoo, est une tache qui demande de bien connaitre le developpement C/C++ sous linux. Le mieux etant de connaitre aussi la SDL (librairie utilisee pour la gestion des graphismes 2D, et qui existe sur pleins d'environnements differents, comme la Caanoo ou Linux ou meme Windows). Le portage d'une application ecrite en C/C++ utilisant la librairie SDL est normalement assez facile. Je te conseille donc de commencer par essayer de porter un petit jeu SDL que tu peux par exemple trouver ici [Vous devez être inscrit et connecté pour voir ce lien]La premiere etape consiste a recompiler cette application sur ton PC linux (c'est pour ca que j'utilise Linux), afin de verifier que tout se passe bien, que tu as bien tous les fichiers etc ... La seconde etape consiste a modifier le makefile (ou le projet de ton IDE) afin de compiler ce meme jeu pour la Caanoo (il faudra donc changer le compilateur gcc pour utiliser celui du SDK caanoo, modifier l'endroit ou se trouvent les 'include' etc ...). Une fois le programme compilé pour caanoo, il faut recopier le binaire sur la caanoo en respectant le standard caanoo (un repertoire + un fichier gpu + icones etc ... enfin tu vois le truc), et lancer le jeu. Si tu as du bol, ca va marcher du premier coup, par contre tu n'auras pas acces aux boutons etc ... Il y aura forcement des bouts de code a modifier dans les sources du jeux, en particulier : - la partie affichage graphique pour forcer l'affichage en 320x240 - la partie son pour forcer a 16 bits stereo 44k - la partie joystick/pad/bouton/clavier pour utiliser les touches de la caanoo J'espere que ca repond en partie a tes questions ? |
| | | admin Team Open Consoles
Messages : 15193 Réputation : 399 Inscrit le : 13/10/2010
| Msg n°3 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mar 21 Juin 2011, 13:35 | |
| Merci pour toutes ces réponses. Effectivement, je me demandais comment ça se passait concrètement. J'utilise Code blocks sur Windows pour coder/compiler. Je vais récupérer le SDK pour voir un peu comment ça fonctionne. D'autres questions vont venir |
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| Msg n°4 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mar 21 Juin 2011, 20:40 | |
| sinon voici le SDK que j'utilise sous ubuntu (a installer dans /usr/local/caanoodev) [Vous devez être inscrit et connecté pour voir ce lien]Et voici les variables d'environnement a mettre a jour : # Caanoo Env export CAANOOGPH=/usr/local/caanoodev/ export CAANOODEV=/usr/local/caanoodev export PATH=${PATH}:${CAANOODEV}/bin Une fois installé, tu peux prendre n'importe lequel des mes homebrew et lancer le makefile pour le compiler |
| | | admin Team Open Consoles
Messages : 15193 Réputation : 399 Inscrit le : 13/10/2010
| Msg n°5 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mar 21 Juin 2011, 21:57 | |
| En cours de récup Bon, mon Ubuntu est réinstallé (suite à un oubli du mdp ), je regarde dans les petits jeux SDL et je choisis.... Adonthell, un RPG, sur la toute première page de ton lien. [Vous devez être inscrit et connecté pour voir ce lien]Je vais dans Download, et là je récupère : Source code updated Je télécharge les deux fichiers, le moteur et et les data. Et là, je lis : - Citation :
- Requirements: SDL 1.2.x, SDL Mixer 1.2.x, SDL TTF 2.0.x, Python 2.0 or higher, Freetype 2 or higher and (optionally) Ogg Vorbis 1.0rc3 or higher.
If you plan to make changes to the code, you will also need SWIG 1.3.20 or newer. Aie !! Est-ce que tout ça va me poser problème ? Je vise trop haut ? |
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| | | | Guest Invité
| | | | admin Team Open Consoles
Messages : 15193 Réputation : 399 Inscrit le : 13/10/2010
| Msg n°8 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mer 22 Juin 2011, 12:43 | |
| Ok ! 1 ) Pour info, sur Ubuntu, tu conseilles quel IDE ? 2 ) je suis un gros boulet sous Linux, la commande pour extraire le fichier c'est bien sudo bunzip2 caanoo-dev-21062011.tar.gz2 ? Mais si je veux le décompresser dans usr, il me dit Input file usr is a directory. Comment je fais 3 ) Donc je prends 12swap.tar.gz que j'ouvre et je trouve : - des fichiers cpp ( qui je pense contiennent les fonctions du programme ) - un main.h ( ça je sais que c'est le programme principal enfin je crois ) - le fichier makefile - deux répertoires graphics et sound contenant ... des images et des sons Donc, mon premier réflexe est de lancer code::blocks pour ouvrir le main.h pour y prendre les infos importantes. Tu m'as dit de d'abord compiler sous linux pour vérifier le fonctionnement. C'est bien ça ? |
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| Msg n°9 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Lun 27 Juin 2011, 22:09 | |
| - BAFelton a écrit:
- Ok !
1 ) Pour info, sur Ubuntu, tu conseilles quel IDE ?
Je n'utilise pas d'IDE, juste l'editeur gvim avec quelques plugins. Mais si j'avais a utiliser un IDE je prendrais ou ECLIPSE, KDevelop ou QTCreator. Sinon CodeBlocks est assez simple aussi. - BAFelton a écrit:
2 ) je suis un gros boulet sous Linux, la commande pour extraire le fichier c'est bien
sudo bunzip2 caanoo-dev-21062011.tar.gz2 ?
Mais si je veux le décompresser dans usr, il me dit Input file usr is a directory. Comment je fais
Normalement le gestion de fichier d'ubuntu sait gerer ces archives mais sinon pour le cas precis : Tout d'abord tu vas a la racine : cd / Ensuite tu desarchives avec la commande tar : sudo tar xjf /chemin_complet_vers_ton_fichier_tar.gz2 - BAFelton a écrit:
3 ) Donc je prends 12swap.tar.gz que j'ouvre et je trouve :
- des fichiers cpp ( qui je pense contiennent les fonctions du programme ) - un main.h ( ça je sais que c'est le programme principal enfin je crois ) - le fichier makefile - deux répertoires graphics et sound contenant ... des images et des sons
Donc, mon premier réflexe est de lancer code::blocks pour ouvrir le main.h pour y prendre les infos importantes. Tu m'as dit de d'abord compiler sous linux pour vérifier le fonctionnement. C'est bien ça ? Oui tout a fait, en general il suffit de lancer le makefile avec la commande 'make' (si tu ne sais pas ce qu'est un makefile, c'est un fichier qui contient la liste des sources et comment fabriquer l'executable, il gere les dependances pour ne re-compiler que ce qui est necessaire lorsque tu modifies en partie les sources). |
| | | admin Team Open Consoles
Messages : 15193 Réputation : 399 Inscrit le : 13/10/2010
| Msg n°10 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mar 28 Juin 2011, 22:29 | |
| Donc je tape make et voici ce que j 'obtiens : - Code:
-
bafelton@bafelton-desktop:~/Jeux/12swap$ make g++ -c -g -O2 main.cpp -o main.o make: g++ : commande introuvable make: *** [main.o] Erreur 127 Ca commence bien |
| | | Guest Invité
| | | | admin Team Open Consoles
Messages : 15193 Réputation : 399 Inscrit le : 13/10/2010
| | | | Guest Invité
| | | | admin Team Open Consoles
Messages : 15193 Réputation : 399 Inscrit le : 13/10/2010
| Msg n°14 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mar 28 Juin 2011, 23:02 | |
| Apparemment ça marche, mais en faisant make : - Code:
-
afelton@bafelton-desktop:~/Jeux/12swap$ make g++ -c -g -O2 main.cpp -o main.o In file included from main.cpp:1: main.h:1:21: error: SDL/SDL.h: Aucun fichier ou dossier de ce type main.h:2:28: error: SDL/SDL_thread.h: Aucun fichier ou dossier de ce type main.h:3:25: error: SDL/SDL_ttf.h: Aucun fichier ou dossier de ce type main.h:4:27: error: SDL/SDL_audio.h: Aucun fichier ou dossier de ce type In file included from main.cpp:1: main.h:30: error: ‘SDL_AudioSpec’ does not name a type main.h:31: error: ISO C++ forbids declaration of ‘Uint8’ with no type main.h:31: error: expected ‘;’ before ‘*’ token main.h:32: error: ‘Uint32’ does not name a type main.h:33: error: ‘Uint32’ does not name a type main.h:93: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:93: error: expected ‘;’ before ‘*’ token main.h:110: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:110: error: expected ‘;’ before ‘*’ token main.h:140: error: ‘SDL_Rect’ does not name a type main.h:141: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:141: error: expected ‘;’ before ‘*’ token main.h:157: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:157: error: expected ‘;’ before ‘*’ token main.h:167: error: ‘SDL_Surface’ has not been declared main.h:175: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:175: error: expected ‘;’ before ‘*’ token main.h:200: error: ‘SDL_Rect’ does not name a type main.h:222: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:222: error: expected ‘;’ before ‘*’ token main.h:223: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:223: error: expected ‘;’ before ‘*’ token main.h:243: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:243: error: expected ‘;’ before ‘*’ token main.h:254: error: ‘SDL_Surface’ has not been declared main.h:272: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:272: error: expected ‘;’ before ‘*’ token main.h:273: error: ISO C++ forbids declaration of ‘SDL_Thread’ with no type main.h:273: error: expected ‘;’ before ‘*’ token main.h:307: error: ‘SDL_Surface’ has not been declared main.h:308: error: ‘SDL_Surface’ has not been declared main.h:309: error: ‘SDL_Surface’ has not been declared In file included from main.cpp:1: main.h:314: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:314: error: expected ‘;’ before ‘*’ token main.h:329: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:329: error: expected ‘;’ before ‘*’ token main.h:330: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:330: error: expected ‘;’ before ‘*’ token main.h:331: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type main.h:331: error: expected ‘;’ before ‘*’ token main.h:332: error: ISO C++ forbids declaration of ‘TTF_Font’ with no type main.h:332: error: expected ‘;’ before ‘*’ token main.h:349: error: ‘SDL_Surface’ has not been declared main.h:349: error: ‘SDL_Rect’ has not been declared main.h:349: error: ‘SDL_Surface’ has not been declared main.h:349: error: ‘SDL_Rect’ has not been declared main.h:351: error: ‘Uint8’ has not been declared main.h:409: error: expected initializer before ‘*’ token main.h:410: error: expected initializer before ‘*’ token main.h:411: error: expected initializer before ‘*’ token main.h:412: error: expected initializer before ‘*’ token main.h:413: error: expected initializer before ‘*’ token main.h:414: error: expected initializer before ‘*’ token main.h:415: error: expected initializer before ‘*’ token main.h:416: error: expected initializer before ‘*’ token main.h:417: error: expected initializer before ‘*’ token main.h:418: error: expected initializer before ‘*’ token main.h:419: error: expected initializer before ‘*’ token main.h:420: error: expected initializer before ‘*’ token main.h:421: error: expected initializer before ‘*’ token main.h:425: error: ‘Uint8’ has not been declared main.cpp: In function ‘int main(int, char**)’: main.cpp:12: warning: deprecated conversion from string constant to ‘char*’ make: *** [main.o] Erreur 1 bafelton@bafelton-desktop:~/Jeux/12swap$
|
| | | Guest Invité
| Msg n°15 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mar 28 Juin 2011, 23:11 | |
| La je te dit que des truc a essayer n'étant pas un Pro comme ZX je dit se que je pense par rapport a tous ce que j'ai appris Je pense qu'il manque aussi SDL comme paquet ou que ce n'est pas placé ou il faut si tu as téléchargé via navigateur Essaye d'installer des Paquet SDL via synaptic je ne saurrais te dire lequel, je lance Ubuntu (mais je doit quitter windaub) |
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| Msg n°16 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mer 29 Juin 2011, 09:28 | |
| Salut Baf, comme le dit Coldragon il faut installer certains packages sous ubuntu pour faire du developpement. En general sur ubuntu de base tu as juste les libraires en version .so mais pas du tout les fichiers 'include' necessaire pour compiler soi meme des applications.
Le mieux c'est de prendre les packages "devel" de la libraire SDL etc ... (avec synaptic). |
| | | admin Team Open Consoles
Messages : 15193 Réputation : 399 Inscrit le : 13/10/2010
| Msg n°17 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mer 29 Juin 2011, 12:50 | |
| Ca avance ! - Code:
-
bafelton@bafelton-desktop:~/Jeux/12swap$ make g++ -c -g -O2 main.cpp -o main.o main.cpp: In function ‘int main(int, char**)’: main.cpp:12: warning: deprecated conversion from string constant to ‘char*’ g++ -c -g -O2 object_drop_animation.cpp -o object_drop_animation.o g++ -c -g -O2 object_normal_animation.cpp -o object_normal_animation.o g++ -c -g -O2 object_point_anim.cpp -o object_point_anim.o g++ -c -g -O2 object_round_anim.cpp -o object_round_anim.o g++ -c -g -O2 object_score_anim.cpp -o object_score_anim.o g++ -c -g -O2 object_score_disolve_anim.cpp -o object_score_disolve_anim.o g++ -c -g -O2 object_screen_button.cpp -o object_screen_button.o g++ -c -g -O2 object_screen_layout.cpp -o object_screen_layout.o g++ -c -g -O2 object_selector_anim.cpp -o object_selector_anim.o g++ -c -g -O2 object_swap_anim.cpp -o object_swap_anim.o g++ -c -g -O2 object_swap_game.cpp -o object_swap_game.o g++ -c -g -O2 object_trial_timer.cpp -o object_trial_timer.o g++ -c -g -O2 screen_game.cpp -o screen_game.o g++ -c -g -O2 screen_gameover.cpp -o screen_gameover.o g++ -c -g -O2 screen_instructions.cpp -o screen_instructions.o g++ -c -g -O2 screen_intro.cpp -o screen_intro.o screen_intro.cpp: In function ‘void load_screen_intro()’: screen_intro.cpp:49: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:51: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:53: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:55: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:57: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:63: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:65: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:69: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:71: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:73: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:75: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:77: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:79: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:83: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:85: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:87: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:89: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:91: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:93: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:95: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:97: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:99: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:101: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:103: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:105: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:109: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:111: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:183: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:184: warning: deprecated conversion from string constant to ‘char*’ screen_intro.cpp:185: warning: deprecated conversion from string constant to ‘char*’ g++ -c -g -O2 screen_intro2.cpp -o screen_intro2.o g++ -c -g -O2 screen_playchoice.cpp -o screen_playchoice.o g++ -lSDL -lSDL_ttf main.o object_drop_animation.o object_normal_animation.o object_point_anim.o object_round_anim.o object_score_anim.o object_score_disolve_anim.o object_screen_button.o object_screen_layout.o object_selector_anim.o object_swap_anim.o object_swap_game.o object_trial_timer.o screen_game.o screen_gameover.o screen_instructions.o screen_intro.o screen_intro2.o screen_playchoice.o -o 12swap
|
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| Msg n°18 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mer 29 Juin 2011, 22:58 | |
| certes, mais ce n'est vraiment que le debut ... Je viens de faire le portage ce soir sur caanoo et c'est assez loin d'etre trivail (du coup ca fera un bon exemple pour les autres ). Une fois que tu as reussi a le lancer sous ubuntu (en faisant ./12swap une fois le binaire compilé). Tu verras tout d'abord que ca marche avec la souris et que la taille de la fenetre est beaucoup plus grande que la taille de l'ecran de la caanoo. Il faudra donc : 1 - modifier le makefile pour compiler les binaires avec le gcc pour caanoo 2 - trouver une astuce pour reduire la taille de la fenetre a celle de l'ecran de la caanoo (tu verras que cela n'est pas suffisant car le jeu fonctionne sur un ecran bitmap de 32 bits alors que la caanoo est en couleurs 16 bits ...) 3 - traiter correctement les evennements joystick / souris et le recaller sur la taille d'origine 4 - ajouter le support des touches de la caanoo (par exemple pour sortir du jeu) 5 - traiter les problemes du son (il faut du 44k 16 bits pour la caanoo) 6 - mettre en place le .gpu / icones etc ... (cette partie la est triviale) Je peux filer le (1) et (5) si on me dit comment heberger des fichiers sur le fofo ... |
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| Msg n°19 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mer 29 Juin 2011, 23:13 | |
| Pour commencer voici le makefile pour la caanoo sachant qu'on considere ici que ma version de SDK a ete installee dans /usr/local/caanoodev et que la variable suivante a ete definie : export CAANOODEV=/usr/local/caanoodev ATTENTION : partout on j'ai mis <TABULATION> il faut mettre une vraie tabulation .. - Code:
-
# Makefile for caanoo #
CAANOODEV = /usr/local/caanoodev SDL_CONFIG = $(CAANOODEV)/bin/sdl-config
CC=arm-gph-linux-gnueabi-gcc CXX=arm-gph-linux-gnueabi-g++ STRIP=arm-gph-linux-gnueabi-strip
CFLAGS = $(shell $(SDL_CONFIG) --cflags) -O2 -I$(CAANOODEV)/include -c -DCAANOO LDFLAGS = -L$(CAANOODEV)/lib -lSDL_image -lSDL -lSDL_ttf \ $(CAANOODEV)/tools/gcc-4.2.4-glibc-2.7-eabi/arm-gph-linux-gnueabi/lib/libstdc++.a \ $(CAANOODEV)/tools/gcc-4.2.4-glibc-2.7-eabi/arm-gph-linux-gnueabi/sys-root/usr/lib/libpng.a \ -lz -lm -lpthread
SOURCES=main.cpp object_drop_animation.cpp object_normal_animation.cpp object_point_anim.cpp object_round_anim.cpp object_score_anim.cpp object_score_disolve_anim.cpp object_screen_button.cpp object_screen_layout.cpp object_selector_anim.cpp object_swap_anim.cpp object_swap_game.cpp object_trial_timer.cpp screen_game.cpp screen_gameover.cpp screen_instructions.cpp screen_intro.cpp screen_intro2.cpp screen_playchoice.cpp
OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=12swap.gpe
ALL_CFLAGS = $(STDC_HDRS) $(UTIME_H) $(UTIME_NULL) $(UTIMBUF) $(CFLAGS)
all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) <TABULATION>$(CXX) $(LDFLAGS) $(OBJECTS) -o $@ <TABULATION>$(STRIP) $(EXECUTABLE)
.cpp.o: <TABULATION> $(CXX) $(CFLAGS) $< -o $@
clean: <TABULATION> @-rm $(EXECUTABLE) $(OBJECTS)
La suite au prochain episode ...
Dernière édition par zx81 le Mer 29 Juin 2011, 23:32, édité 1 fois |
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| Msg n°20 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Mer 29 Juin 2011, 23:30 | |
| Et voici donc pour les differents fichiers a mettre sur la caanoo pour qu'on puisse lancer l'executable : Il faut creer un repertoire game/12swap sur la SD de la caanoo et mettre comme d'habitude un 12swap.ini dans game contenant au minimum ceci : 12swap.ini : - Code:
-
[info] name="Caanoo 12 Swap" path="/12swap/12swap.gpu"
Ensuite on cree un script 12swap.gpu dans game/12swap/ qui contient ceci : 12swap.gpu : - Code:
-
#!/bin/sh
./12swap.gpe 2>&1 > /dev/null
cd /usr/gp2x exec /usr/gp2x/gp2xmenu
Ceci permet d'executer notre binaire 12swap.gpe et lorsque c'est fini de relancer le menu de la caanoo (sinon on a un ecran noir et il faut tout redémarrer). Ici une archive de mon portage rapide avec tous les fichiers necessaires : [Vous devez être inscrit et connecté pour voir ce lien]Je mettrais les sources au fur et a mesure pour essayer de montrer comment on fait et surtout pourquoi on le fait ... |
| | | Guest Invité
| Msg n°21 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Jeu 30 Juin 2011, 03:25 | |
| Une petit info pour ceux qui passerais par la et qui n'aurais pas compris comment placer caanoodev en /usr/local/caanoodev. - Spoiler:
Soit passer par le terminal en utilisant, si le dossier se trouve sur le bureau et en remplacant utilisateur par le nom de l'utilisateur actuel - Code:
-
sudo mv /home/$USER/Bureau/caanoodev /usr/local/ ou si vous voulez y aller a la barbare ouvrer nautilius avec sudo, toujours dans le terminal taper - Code:
-
sudo nautilus Ou encore en fesant Alt+F2 et taper - Code:
-
gksudo "nautilus"
Voila Au faite, Zx (Ou baf si tu as reussis),silteplait, j'aimerais savoir, comment modifier les variables d'environnement ? La j'ai ouvert .profile - Code:
-
sudo gedit ~/.profile mais je sais pas vraiment où mettre - Code:
-
# Caanoo Env export CAANOOGPH=/usr/local/caanoodev/ export CAANOODEV=/usr/local/caanoodev export PATH=${PATH}:${CAANOODEV}/bin Merci d'avance, et pour tous ce que tu as fait |
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| | | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| Msg n°23 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Jeu 30 Juin 2011, 21:32 | |
| Si on lance la makefile modifie on doit pouvoir obtenir a la fin un binaire 12swap.gpe executable sur la caanoo. Par contre il ne fonctionnera pas du tout car il va chercher a passer en mode 640x520x32 bits alors que la caanoo ne supporte que le mode 320x240x16 bits. Du coup il faut modifier un peu les sources pour que ca passe. Il nous faut ajouter un champs dans la classe Swap_Game (fichier main.h) pour stocker la vraie Surface SDL a utiliser pour l'ecran de la caanoo (on gardera la Surface SDL d'origine main_screen comme surface intermediaire) Modifications de main.h : - Code:
-
... // au debut pour les includes ... #include <SDL/SDL_video.h> #include <SDL/SDL_joystick.h>
// puis un peu plus bas ...
class Swap_Game { public: .... SDL_Surface *real_screen; // Ajout de real_screen pour la vraie surface SDL de l'ecran de la caanoo SDL_Surface *main_screen; ... }
Il faut ensuite modifier le SetVideoMode (initialisation SDL de l'ecran) pour le forcer a passer en resolution caanoo, et partout ou il y a une reference a une surface en 32 bits il faut plutot utiliser la profondeur 16 bits (ou simplement celle donnee par SDL_GetVideoSurface()->format .... Modifications de la fonction create_second_screen_layer dans object_swap_game.cpp : - Code:
-
oid Swap_Game::create_second_screen_layer() { Uint32 rmask, gmask, bmask, amask; //gotta have a screen to model it off of... if(!this->main_screen) return;
// On remplace le code d'origine par celui ci qui est beaucoup plus portable : rmask = main_screen->format->Rmask; gmask = main_screen->format->Gmask; bmask = main_screen->format->Bmask; amask = main_screen->format->Amask; // Comme ca on aura 16 bits ou 32 bits en fonction de la plateforme PC ou Caanoo int num_bits = main_screen->format->BitsPerPixel;
//make the surface this->layered_screen = SDL_CreateRGBSurface( SDL_HWSURFACE | SDL_SRCCOLORKEY | SDL_SRCALPHA, this->main_screen->w, this->main_screen->h, num_bits, rmask, gmask, bmask, amask); ...
Modifications de la fonction create_backup_screen_layer dans object_swap_game.cpp : - Code:
-
void Swap_Game::create_backup_screen_layer() { Uint32 rmask, gmask, bmask, amask; //gotta have a screen to model it off of... if(!this->main_screen) return; rmask = main_screen->format->Rmask; gmask = main_screen->format->Gmask; bmask = main_screen->format->Bmask; amask = main_screen->format->Amask; int num_bits = main_screen->format->BitsPerPixel;
//make this swaping surface because it will be needed... this->main_screen_temp = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_SRCCOLORKEY, this->main_screen->w, this->main_screen->h, num_bits, rmask, gmask, bmask, mask); SDL_SetAlpha(this->main_screen_temp,SDL_RLEACCEL|SDL_SRCALPHA,255); }
Il faut egalement modifier la fonction init_sdl dans object_swap_game.cpp : - Code:
-
... // Ici on ajouter SDL_INIT_JOYSTICK, necessaire pour la Caanoo if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_JOYSTICK) <0) ... // Voici le code a mettre pour la version Caanoo, il ne faut pas oublier d'ajouter un -DCAANOO // dans le makefile ... # ifdef CAANOO SDL_JoystickEventState(SDL_ENABLE); SDL_JoystickOpen(0);
this->real_screen = SDL_SetVideoMode(320,240, 16, SDL_SWSURFACE); this->main_screen = SDL_CreateRGBSurface(SDL_SWSURFACE, 640, 520, this->real_screen->format->BitsPerPixel, this->real_screen->format->Rmask, this->real_screen->format->Gmask, this->real_screen->format->Bmask, this->real_screen->format->Amask ); SDL_ShowCursor(SDL_DISABLE); # else // le code PC this->main_screen = SDL_SetVideoMode(640,520,32,SDL_HWSURFACE|SDL_DOUBLEBUF); if (!this->main_screen) { printf("error: could not set screen for 640x520 32bit\n"); return 0; } # endif
Il faut aussi modfiier la fonction draw_text_noflip : - Code:
-
... if(r_backround != -1 || g_backround != -1 || b_backround != -1) { rmask = main_screen->format->Rmask; gmask = main_screen->format->Gmask; bmask = main_screen->format->Bmask; amask = main_screen->format->Amask; int num_bits = main_screen->format->BitsPerPixel;
back_surface = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_SRCCOLORKEY, text_surface->w, text_surface->h, num_bits, rmask, gmask, bmask, amask); ...
ET pour finir la fonction - Code:
-
void Swap_Game::flip_screen() { while (this->screen_flipping) SDL_Delay(1); this->screen_flipping = true; # ifdef CAANOO // Ici on recopie la surface avec la geometrie d'origine sur la surface associee a l'ecran de la caanoo // en faisant evidement un 'rescale' de l'image. SDL_SoftStretch( this->main_screen, NULL, this->real_screen, NULL ); // On peut maintenant afficher l'image a l'ecran de la caanoo SDL_Flip(this->real_screen); # else // Version PC ... pas besoin de SoftStretch evidemment ... SDL_Flip(this->main_screen); # endif this->screen_flipping = false; }
Il reste ensuite a modifier partout ou il y a du 32 bits explicite pour les Surface en particulier dans void Selector_Animation::create_backround() object_selector_anim.cpp - Code:
-
void Selector_Animation::create_backround() { Uint32 rmask, gmask, bmask, amask; SDL_Rect destination, crop_area; //set some defaults... destination.x = 0; destination.y = 0; destination.w = 49; destination.h = 47; crop_area.x = this->x; crop_area.y = this->y; crop_area.w = 49; crop_area.h = 47;
SDL_Surface* g_main_screen = SDL_GetVideoSurface(); rmask = g_main_screen->format->Rmask; gmask = g_main_screen->format->Gmask; bmask = g_main_screen->format->Bmask; amask = g_main_screen->format->Amask; int num_bits = g_main_screen->format->BitsPerPixel; //create the surface this->back_round = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_SRCCOLORKEY, 49, 47, num_bits, rmask, gmask, bmask, amask);
Il y a aussi le meme genre de modif dans screen_intro.cpp (je vous laisse faire) |
| | | zx81 Dev' Open Source
Messages : 206 Réputation : 25 Inscrit le : 24/10/2010
Localisation : France
| Msg n°24 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Jeu 30 Juin 2011, 21:42 | |
| Vous pensez que c'est terminé ? Et bien non !! Voici les sources complets ici : [Vous devez être inscrit et connecté pour voir ce lien]Il reste en particulier a gerer la sortie du jeu lorsqu'on utilise le bouton "HOME", il faut aussi s'occuper du probleme de son (pas compatible caanoo dans la version d'origine) et surtout resoudre le probleme de la souris / touchscreen qui s'attend a avoir une zone de souris de 640x520 alors qu'on est en 320x240 ! Pour le probleme de taille / zone de souris je vous propose la modification suivante dans object_screen_layout.cpp (ajout d'une fonction pour recaller 640x520 sur 320x240 : - Code:
-
# ifdef CAANOO static void caanoo_scale_xy( int& x, int& y ) { x = (x * 640) / 320; y = (y * 520) / 240; } # endif
void Screen_Layout::do_mousepress(int x, int y) { int i; # ifdef CAANOO caanoo_scale_xy( x, y ); # endif
if(!this->func_buttonpress) return;
for(i=0;i<this->button_max;i++) if(this->button[i]->is_active() && this->button[i]->within_boundary(x,y)) { this->func_buttonpress(i); break; } }
void Screen_Layout::do_mousemovement(int x, int y) { int i; int is_over;
# ifdef CAANOO caanoo_scale_xy( x, y ); # endif ....
Pour le probleme de son incompatible je vous propose la modification suivante dans object_swap_game.cpp : - Code:
-
int Swap_Game::init_audio() { SDL_AudioSpec fmt; /* Set 16-bit stereo audio at 22Khz */ # ifdef CAANOO fmt.freq = 44100; fmt.format = AUDIO_S16; fmt.channels = 2; fmt.samples = 1024; fmt.callback = mixaudio; fmt.userdata = NULL; # else fmt.freq = 22050; fmt.format = AUDIO_S16; fmt.channels = 2; fmt.samples = 512; /* A good value for games */ fmt.callback = mixaudio; fmt.userdata = NULL; # endif ...
Et pour le bouton home dans le meme fichier - Code:
-
void Swap_Game::handle_events() { SDL_Event event; int exitkey = 0;
while(!exitkey && SDL_WaitEvent(&event))//SDL_PollEvent(&event)) switch( event.type ) { # ifdef CAANOO #define CAANOO_HOME 6 case SDL_JOYBUTTONDOWN : { int button = event.jbutton.button; if (button == CAANOO_HOME) exitkey = 1; } break; # endif case SDL_QUIT: exitkey = 1; break; ....
Donc comme vous pouvez le voir, le portage d'un jeu SDL sur caanoo n'est pas forcement si facile que ca ... cela demande de bien connaitre : - le C /C++ - la librairie SDL - les limitations / infos materielles de la caanoo En esperant avoir sucité des envies de portages |
| | | admin Team Open Consoles
Messages : 15193 Réputation : 399 Inscrit le : 13/10/2010
| Msg n°25 Sujet: Re: [Tuto] Portage d'un jeu SDL sur Caanoo - Par Zx81 Jeu 30 Juin 2011, 21:52 | |
| - zx81 a écrit:
- certes, mais ce n'est vraiment que le debut ... Je viens de faire le portage ce soir sur caanoo et c'est assez loin d'etre trivail (du coup ca fera un bon exemple pour les autres ).
Une fois que tu as reussi a le lancer sous ubuntu (en faisant ./12swap une fois le binaire compilé). Tu verras tout d'abord que ca marche avec la souris et que la taille de la fenetre est beaucoup plus grande que la taille de l'ecran de la caanoo.
Il faudra donc : 1 - modifier le makefile pour compiler les binaires avec le gcc pour caanoo 2 - trouver une astuce pour reduire la taille de la fenetre a celle de l'ecran de la caanoo (tu verras que cela n'est pas suffisant car le jeu fonctionne sur un ecran bitmap de 32 bits alors que la caanoo est en couleurs 16 bits ...) 3 - traiter correctement les evennements joystick / souris et le recaller sur la taille d'origine 4 - ajouter le support des touches de la caanoo (par exemple pour sortir du jeu) 5 - traiter les problemes du son (il faut du 44k 16 bits pour la caanoo) 6 - mettre en place le .gpu / icones etc ... (cette partie la est triviale)
Je peux filer le (1) et (5) si on me dit comment heberger des fichiers sur le fofo ...
1 - Modifier la ligne 2 du makefile et mettre : bindir = /usr/local/caanoodev/bin 2 - Je mettrais bien cette ligne dans le main.h : SDL_SetVideoMode(320, 240, 12); mais j'ai peur que ça ne change que la taille de la fenêtre et pas la taille des images affichées Je pense que les 3/4/5 se passent dans le main, les cpp ne devraient pas être modifiés. Je serais parti en premier sur convertir les images dans le format Caanoo via un logiciel d'images et rééchantillonner les sons, mais apparemment, tu n'y a pas touché. Donc il y a des fonctions à ajouter pour éviter d'avoir à le faire. Pour héberger, utilise easyshare.com ou multiupload si tu veux EDIT : je viens de lire ton post, wah, il va falloir encaisser tout ça |
| | | Contenu sponsorisé
| | | | |
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| Derniers sujets | » [vds/ech] GPD WinMaxAujourd'hui à 12:10 par raphaelpp » Bonjour a tousAujourd'hui à 12:00 par Pounours » PI 400 Lightgun boxAujourd'hui à 11:54 par k0en» Retroid pocket 5Aujourd'hui à 08:42 par steffiroth » AYN Odin 2 PortalAujourd'hui à 00:31 par deemak » Trimui Smart Pro Hier à 21:22 par _n3o_ » Neo-geo sur androidHier à 18:15 par Atomes » Emplacement croix directionnelleHier à 14:13 par Alphonse » Bartop tout assemblé...un rêve ?Hier à 13:28 par batpoigne » Pincab mini (et questions pincab en général)Hier à 07:13 par batpoigne » tuto Pegasus front endMer 20 Nov 2024, 20:25 par Eye77 » ES-DE pour androidMer 20 Nov 2024, 19:01 par arnodaro » Retour vers le passéMer 20 Nov 2024, 14:50 par zahbout » AyaNeo Flip - Nouvelle console à double écran Mer 20 Nov 2024, 13:37 par tortipouss » NOEL DU FOFOMar 19 Nov 2024, 18:46 par arnodaro » Specs Comparison toolLun 18 Nov 2024, 12:54 par Alphonse » [ANBERNIC RG ARC-D/S] OC-ARCPADLun 18 Nov 2024, 12:13 par fbouille » TJD T80 RK3588S Dim 17 Nov 2024, 19:54 par Rival187 » Salut à tousDim 17 Nov 2024, 13:17 par Atomes » Miyoo Mini +Dim 17 Nov 2024, 11:30 par probox4ever |
La Timeline Open-Consoles |
|
|