IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Projets Discussion :

Back to roots


Sujet :

Projets

  1. #121
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    :clap: Bravo pour l'avancement

    Pour le "probleme" de sprites, il y a deux solutions:
    -> Modifie le moteur / sprite sheet de votre version
    -> Faire une feuille de config avec les IDs et les position des sprites qui y corresponde ( c'est une solution similaire dans mon jeu qui va etre mise en place )

    Sinon, le renderer de texte est super cool

    [EDIT] J'ai enfin active les notifications pour ce thread \o/
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #122
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    :clap: Bravo pour l'avancement


    Pour le "probleme" de sprites, il y a deux solutions:
    En effet, je n'en vois pas vraiment d'autre...

    -> Modifie le moteur / sprite sheet de votre version
    Ben au final, il faudrait repasser par la feuille que j'utilise et tous les fichiers de configuration pour mettre le bon élément. Là où cela devient un peu tordu est le fait que j'ai des choses dans le moteur qui ne sont pas défini dans la feuille de base -> les lumières, les coffres ouverts, etc.

    Du coup, il va bien falloir que je modifie un peu le moteur.

    -> Faire une feuille de config avec les IDs et les position des sprites qui y corresponde ( c'est une solution similaire dans mon jeu qui va etre mise en place )
    J'ai pensé à cela mais cela va gravement limiter mon moteur. Je pense que je dois accepter de faire la première solution et accepter que sinon, on obtient des choses un peu bizarre comme ce qu'on voit.

    Je ne vois pas de meilleure solution... Et j'ai envie de me lancer dans la prochaine étape : charger un niveau du jeu de base donc...

    Sinon, le renderer de texte est super cool
    Oui, cela me fait bien sourire que cela ait marcher aussi facilement !

    [EDIT] J'ai enfin active les notifications pour ce thread \o/
    , ce n'est pas trop tôt !
    Jc

  3. #123
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    J'ai pensé à cela mais cela va gravement limiter mon moteur. Je pense que je dois accepter de faire la première solution et accepter que sinon, on obtient des choses un peu bizarre comme ce qu'on voit.

    Je ne vois pas de meilleure solution... Et j'ai envie de me lancer dans la prochaine étape : charger un niveau du jeu de base donc...
    Bon courage (sinon, en extra solution, faire toute logique en LUA (voie qu'il faudra que je suive, un jour ))
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #124
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bon courage (sinon, en extra solution, faire toute logique en LUA (voie qu'il faudra que je suive, un jour ))
    J'y ai pensé aussi, je pense que je vais faire le pas un jour pour ce projet mais ce n'est pas clair...

    Cela le deviendra une fois que je tente d'intégrer un autre jeu de facon aussi transparente que possible au moteur.

    À ce moment là on verra ce qui passera du côté LUA ou non, pour l'instant je me plait dans mon monde C++ ;-), déjà j'ai viré la dépendance 100% glut ;-)
    Jc

  5. #125
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    En continuant l'intégration du jeu de base, on en est à pouvoir charger les villes, comme le montre les screenshots. On peut se balader dedans bien que pour le moment la ville est entièrement vide et on ne peut pas sortir de la ville.

    La prochaine étape est de gérer le monde extérieur pour pouvoir sortir de la ville et se balader dans le monde.

    Ensuite, je vais m'occuper des animations des tuiles car pour le moment, les tuiles ne s'animent pas !

    Je mets comme d'habitude les images en VGA et en EGA :
    Nom : Screenshot-Back to roots --- Version: 1.26.png
Affichages : 53
Taille : 253,4 Ko

    Nom : Screenshot-Back to roots --- Version: 1.26-1.jpg
Affichages : 58
Taille : 97,3 Ko
    Jc

  6. #126
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2008
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2008
    Messages : 86
    Points : 355
    Points
    355
    Par défaut
    * Clap, Clap *

    PS : Vive Lua! :troll:

  7. #127
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    En continuant la gestion du jeu, je me suis lancé dans le chargement des Npc (Non-playing characters) et de leur conversation. Dans ma version, le moteur utilise ses propres fichiers externes. Mais, ici, on doit passer par les données déjà en fichier, du coup, j'ai du ajouter du code pour le gérer.

    Nous avons donc maintenant la gestion des Npc directement du jeu et leur conversation gérée à 90% (il me manque un cas où il peuvent poser une question au joueur que je ne gére pas encore).

    Du coup, notre ville commence à ressembler à quelque chose :
    Nom : Screenshot-Back to roots --- Version: 1.27.jpg
Affichages : 48
Taille : 102,2 Ko

    Nom : Screenshot-Back to roots --- Version: 1.27-1.jpg
Affichages : 47
Taille : 91,3 Ko

    Je vais attaquer la gestion des portes et la gestion des champs énergétiques et on sera en bon chemin d'une ville entièrement fonctionnelle. Il faudra revoir les marchands et ca sera pas mal.

    Jc

  8. #128
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Histoire d'être légal et vu que le projet se tourne désormais de plus en plus à utiliser les fichiers de base, j'ai envoyé hier un mail pour savoir si je pouvais légalement continuer le port du jeu d'origine sur Linux.

    Ceci veut dire 3 choses :

    - Premièrement : s'ils disent non, le projet prendra un virement vers faire mon propre jeu avec mon moteur, sans toucher les fichiers d'origine... (du coup, il va me falloir des graphistes, etc.)

    - Deuxièmement : s'ils disent oui, ben c'est :yeah:

    On verra bien, pour le moment, je continue mon petit chemin :-)

    Jc

    PS: Les portes et les champs énergétiques sont gérés par le moteur :-)

  9. #129
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    * Croise les doigts

    Mais je pense que ce sera bon
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  10. #130
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    En continuant l'avancée, beaucoup de petites choses ont changé mais on va parlé d'un délire d'un soir. Je vous ai saturé d'images des deux versions et jusqu'à ce soir:

    #Name of default sprite sheet
    default
    #Type of loader used (VGA U4)
    U4VGA
    ../ULTIMA4VGA/shapes.vga
    ../ULTIMA4VGA/u4vga.pal
    #Type of loader used (Original U4)
    U4
    ../ULTIMA4/SHAPES.EGA
    Par contre, cela voulait dire qu'on ait une seule version par exécution. Et, bien que cela puisse suffire dans beaucoup de cas, je me suis dit que ce serait sympa d'avoir un système qui permet de passer de l'un à l'autre de facon transparente pendant que le programme tourne.

    Du coup, ce fichier est devenu comme ceci :


    #Number of extensions
    2
    #Name of default sprite sheet
    default
    #Type of loader used (VGA U4)
    U4VGA
    ../ULTIMA4VGA/shapes.vga
    ../ULTIMA4VGA/u4vga.pal
    #Type of loader used (Original U4)
    U4
    ../ULTIMA4/SHAPES.EGA
    Du coup, mon chargeur de textures spécial est devenu un chargeur de multiples textures. Mais comment il s'en sort alors ?

    Ben, le jeu continue de lui demander la texture "default", mais lui doit l'associer tantôt avec la version normale et tantôt avec la version VGA. J'ai donc rajouter deux éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            /**
             * @brief map of vector of extensions for associations
             */
            std::map<std::string, std::vector<std::string> > extensions;
     
            /**
             * @brief association base name <-> extension 
             */
            std::map<std::string, std::string> current_extension;
    Ce qui permet d'avoir : toutes les extensions pour une texture donnée et la version qu'on veut en ce moment.

    Pour passer de l'un à l'autre, j'utilise la fonction suivante :
    - Elle récupére si on a des extensions pour ce nom
    - Ensuite elle récupére la position courante de l'association et passe à la prochaine


    Comment fait-on pour faire l'association lors du rendu ? Ben là maintenant, à chaque rendu on doit demander la texture voulu via le nom (faudra optimiser cela mais pour le moment je tourne à 60 images par seconde donc...)

    Je rappelle que le point d'entrée de mon système est une fonction getTexture qui charge au pire la texture si ce n'est pas déjà fait. La seule chose dont j'ai besoin est de voir si j'ai une association en place et remplacer le nom par celle-ci.

    Ce qui permet donc de passer de facon totalement transparente entre des sprites-sheets :-)

    Jc

  11. #131
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Ok, je suis arrivé à la révision 300 du SVN et je me suis dit qu'il était temps de peut-être fournir une pre-alpha.

    Gardez en tête que beaucoup de choses sont en suspens car le moteur accepte beaucoup de chose mais j'ai éteins pas mal de choses parce que je ne les ai pas encore intégrer.

    Bref, vous pouvez trouver le jeu ici : backtoroots.tar.gz (il faudra le compiler par contre)

    Ensuite, il faudra ensuite télécharger :
    - http://prdownloads.sourceforge.net/x...1.zip?download
    - http://prdownloads.sourceforge.net/x...d.zip?download

    Ces deux zip, il faudra les extraire au même niveau que backtoroots donc pas à l'intérieur...

    Par exemple :
    ~/Projects$ ls
    backtoroots ULTIMA4 ULTIMA4VGA
    ~/Projects$
    Si vous ne voulez pas mettre les deux répertoires comme cela ou les nommez comme cela, vous pouvez changer le fichier data/defaultSprite.txt.

    Ensuite, make pour installer. En principe, cela vous crée un main et vous pouvez le lancer tel quel.

    Il devrait vous mettre dans une ville trinsic.

    Vous pouvez :
    - Bouger
    - Discuter avec les gens
    - F1 résume les touches
    - F11 échange les graphismes utilisés

    Vous ne pouvez pas:
    - Sortir de la ville
    - Discuter avec les marchands (cela bloque pour l'instant le jeu)

    Je n'ai que tester ce projet sur Ubuntu et sur deux machines, s'il y a des soucis, de me le dire. Et je m'excuse pour cette version pre-alpha ;-)

    Jc

  12. #132
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bon, ce matin je devais être super chaud ... car j'ai voulu installé votre jeu

    Déjà, il me manque le fichier d'entête de glut.h (moi j'ai l'habitude de le distribuer avec mon application)
    Par contre, petit avantage, cela me permet de passer par freeglut sous Linux

    Deuxième erreur ... SDL_framerate.h qui est manquante (note, j'ai les paquets SDL en version de dev, d'installer) O_o
    Ok il me fallait le SDL_gfx aussi (j'ai jamais utilisé, car moi je sais faire mes compteurs FPS à la main :p)
    Hop c'est compilé \o/

    Listes des dépendances (sans trop me tromper (car il faut les donner)):
    • SDL
    • SDL_image
    • SDL_ttf
    • SDL_gfx
    • GLUT


    (Joli petit makefile (plus intelligent que le mien), sauf que cela produit un programme main )

    Sinon, j'ai lancé le jeu ... et je crois que la résolution est trop grande pour mon PC (bah oui, j'ai un PC portable avec des petites résolutions pour la hauteur )
    Du coup, je crois que je ne vois pas les dialogues

    Wouhou j'ai trouvé un squelette caché dans les buissons \o/
    Et un mage de l'autre coté (toujours dans les buissons, ils ont un problèmes ces gens O_o)

    Cela fait une grande fenêtre pour presque rien

    Edit: J'hallucine le mage il m'a piqué tout mon argents
    Edit2: Oh y a des champs de poison
    Edit3: Et la touche echap ne quitte pas le jeu (il fallait que je retrouve la croix qui n'était pas sur l'écran )



    Sinon aucun soucis de rencontrer Vraiment beau boulot
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  13. #133
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Déjà, il me manque le fichier d'entête de glut.h (moi j'ai l'habitude de le distribuer avec mon application)
    En effet, j'aurai dû lister cela. Je n'inclus pas cela car je préfére laisser aux gens installer les librairies externes.

    Par exemple:
    Par contre, petit avantage, cela me permet de passer par freeglut sous Linux
    Deuxième erreur ... SDL_framerate.h qui est manquante (note, j'ai les paquets SDL en version de dev, d'installer) O_o

    Ok il me fallait le SDL_gfx aussi (j'ai jamais utilisé, car moi je sais faire mes compteurs FPS à la main :p)
    SDL_framerate te permet de dire quel FPS tu veux ;-)

    Listes des dépendances (sans trop me tromper (car il faut les donner)):
    • SDL
    • SDL_image
    • SDL_ttf
    • SDL_gfx
    • GLUT
    SDL_ttf m'étonne, faudrait que je regarde cela
    SDL_image aussi est une erreur d'inclusion je pense, vu que j'utilise directement SDL_LoadBMP.

    (Joli petit makefile (plus intelligent que le mien), sauf que cela produit un programme main )
    Moi j'aime bien main comme nom ;-)

    Sinon, j'ai lancé le jeu ... et je crois que la résolution est trop grande pour mon PC (bah oui, j'ai un PC portable avec des petites résolutions pour la hauteur )
    Du coup, je crois que je ne vois pas les dialogues
    Gros todo cela : géré multiples résolutions...

    Edit: J'hallucine le mage il m'a piqué tout mon argents
    C'est vrai pourquoi ? Comment ?

    Edit3: Et la touche echap ne quitte pas le jeu (il fallait que je retrouve la croix qui n'était pas sur l'écran )
    C'est 'q' pour quitter.

    Sinon aucun soucis de rencontrer Vraiment beau boulot
    d'avoir pris le temps de le tester !

    Jc

  14. #134
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par fearyourself Voir le message
    SDL_ttf m'étonne, faudrait que je regarde cela
    SDL_image aussi est une erreur d'inclusion je pense, vu que j'utilise directement SDL_LoadBMP.
    Non non, pardon :red:
    SDL_ttf et SDL_image, je les ai sur mon PCs, mais ... bon, rien ne m'a dit que j'en avez besoin pour votre projet . C'est juste que comme je vois des images et du texte
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  15. #135
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Dans les deux premiers éléments légérement scriptés du jeu se trouvent :

    - Le mendiant
    - L'aubergiste

    Le mendiant : on peut lui donner de l'argent, et donc on dit "give" et ensuite on peut donner une valeur qui est enlevé de notre or global.

    Ceci est fait en ajoutant un état dans la conversation "NPC_WANTS_CONVERSATION". Ceci permet de dire "le Npc veut quelque chose" et le moteur ensuite demande que veut le Npc. Chose remplit, on vérifie qu'on a la/les choses et ensuite dit au Npc oui on a cela, non on n'a pas ce que tu demandes.

    Ensuite le Npc peut décider ce qu'il veut comme faire comme conséquence.

    Ceci permet de faire ce genre de chose pour le mendiant:
    Avant d'avoir donné :
    Nom : Screenshot-Back to roots --- Version: 1.28-1.png
Affichages : 48
Taille : 198,9 Ko

    Après:
    Nom : Screenshot-Back to roots --- Version: 1.28-2.png
Affichages : 43
Taille : 195,2 Ko

    L'explication de l'aubergiste vient dans un post ultérieur ;-)
    Jc

  16. #136
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut


    Y a t'il un avantage à donner de l'argent à un mendiant dans un jeu ?
    Et pour l'aubergiste vous avez trouvé le truc alors ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  17. #137
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Y a t'il un avantage à donner de l'argent à un mendiant dans un jeu ?
    Pour le jeu de base : oui. En effet, donner à un mendiant faisait augmenter les points de compassion.

    Et pour l'aubergiste vous avez trouvé le truc alors ?
    Pour ceux qui ont suivi l'histoire : dans la ville nous avons des Npcs. Certains sont définis clairement et d'autres non . Tous les marchands sont en fait définis en dur dans le code du jeu, du coup, il faut que je fasse un truc similaire.

    Déjà, pour l'instant, c'est codé en dur pour cette ville, ensuite je ferai un fichier de configuration pour dire qui est qui.

    Comment cela marche ? Déjà, comme pour le mendiant, l'aubergiste ou le marchand sont des éléments du jeu de base et donc une spécialisation du moteur que j'avais fait avant.

    J'ai donc comme classes :
    Nom : classCharacter__inherit__graph.png
Affichages : 41
Taille : 12,2 Ko

    Ceci me permet de spécialiser leur comportement sans nuire au moteur de jeu.

    Pour en venir à l'aubergiste, il est assez particulier puisqu'il commence par discuter pour dire "voulez vous une chambre" :
    Nom : Screenshot-Untitled Window.png
Affichages : 56
Taille : 203,5 Ko

    Ensuite, on peut dire oui/non. Sur non on sort, sur oui, il propose une chambre:
    Nom : Screenshot-Back to roots --- Version: 1.28.png
Affichages : 39
Taille : 220,4 Ko

    Pareil, on peut dire oui/non. Sur non on sort, sur oui, il nous envoit dans notre chambre et on dort.
    Nom : Screenshot-Back to roots --- Version: 1.28-1.png
Affichages : 53
Taille : 117,3 Ko

    Remarquez que j'ai un bug dans mon rendu, je fais le rendu de cases qui normalement devraient être bloquées. Un bug trouvé !

    Ensuite, il nous réveille et cela nous donne un peu de repos et de guérison !
    Nom : Screenshot-Back to roots --- Version: 1.28-2.png
Affichages : 46
Taille : 122,5 Ko

    Comment cela est programmé ?

    Tout se passe en interne sur la gestion de la conversation, mais comment fait-on pour spécialisé notre aubergiste ?

    Cela est simple, nous avons un automate qui décide quelle est la question courante et quelle est la réponse voulue. Pour le moment, seul l'aubergiste en a besoin, donc je n'ai pas encore factorisé ce code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     switch (internalState)
        {
            case INN_WELCOME:
                internalState = INN_WANTLODGING;
                goingToSleep = false;
                return NpcU4::getAnswer ("first_text", status);
    Lorsqu'on commence, on dit : ok je veux dire bienvenue et pour le moment je ne propose pas d'envoyer le joueur au lit.

    NpcU4 contient une fonction getAnswer qui en fait renvoit entre autre au getAnswer de Npc ;-). Cela me permet d'avoir ma bienvenue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
            case INN_WANTLODGING:
                if (s.compare ("yes") == 0)
                {
                    //Ok continue
                    internalState = INN_WANTROOM;
                    return NpcU4::getAnswer ("give_price", status);
                }
                else
                {
                    if (s.compare ("no") == 0)
                    {
                        //Ok then say good bye
                        return NpcU4::getAnswer ("last_text", status);
                    }
                }
                return "I'm sorry, I don't understand\nAre you in need of lodging?";
    Ce code me permet de m'assurer que j'ai un yes/no comme réponse. Dans le cas d'un no, je demande la réponse de "last_text" qui met fin à la conversation. Dans le cas du oui, on continue. Enfin, dans le cas général, on redemande une réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
            case INN_WANTROOM:
                if (s.compare ("yes") == 0)
                {
                    //Ok we're almost done 
                    internalState = INN_WELCOME;
                    *status = NPC_WANTS_CONVERSATION;
                    return "";
                }
                else
                {
                    if (s.compare ("no") == 0)
                    {
                        //Ok then say good bye
                        return NpcU4::getAnswer ("last_text", status);
                    }
                    return "I'm sorry, I don't understand\nAre you in interested?";
                }
                break;
    Pareil, une fois qu'on dit oui, on demande quelque chose via l'infrastructure NPC_WANTS_CONVERSATION.

    Ceci provoque que le moteur va faire un appel à getWant qui est devenu comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    bool InnkeeperU4::getWant (std::string &name, unsigned int &nbr)
    {
        name = "Gold";
        nbr = Iwant;
        return true;
    }
    Ceci dit au moteur : je veux de l'or et j'en veux Iwant qui est défini comme le prix de la chambre.

    Si le joueur a de l'argent, on a un appel à wantGranted :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    std::string InnkeeperU4::wantGranted (Group *group, Map *map, int *status)
    {
        //Start by resetting lastQuestion
        lastQuestion = "";
        goingToSleep = true;
     
        //Ok now actually teleport user
        group->goThere (map, destX, destY);
        group->fallAsleep (2000, true);
        map->calculateVisible ();
     
        return NpcU4::getAnswer ("going_to_sleep", status);
    }
    Ce qui met fin à la discussion et transporte le joueur à son lit. Remarquez que mon bug de rendu se trouve dans calculateVisible ;-) Je sais où le souci se trouve !

    Sinon, la conversation se termine avec un grantDenied que je ne présente pas ici.

    Enfin, lorsque la conversation se termine, le moteur va appeler handleEndState :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void InnkeeperU4::handleEndState (int *status)
    {
        if (goingToSleep == true)
            *status = GS_INN_SLEEPING_STATE;
        else
            *status = GS_DEFAULT_STATE;
    }
    Ceci dit au moteur, c'est bon, endort le joueur et soigne le après.

    Je ne vais pas montrer le chargement de l'aubergiste car c'est une lecture des les fichiers du jeu d'origine et vraiment sans intérêt. Par contre, on voit comment, une fois le moteur bien défini, la gestion d'un personnage est facile.

    Prochaine présentation : le marchand de nourriture qui est aussi facile voir encore plus.

    Jc

  18. #138
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Donc voilà qui est fait depuis un petit moment : le vendeur de nourriture !

    Très simple vu que le moteur de jeu gére la plupart des choses, la seule chose à faire est de récupérer toutes les informations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void MerchantU4::loadUpFoodInformation (char *data, int index)
    {
        int merchantIndex = *((char *) (0x155df + data + index));
     
        assert (merchantIndex);
        merchantIndex--;
    Tout d'abord nous avions besoin de l'index du marchant par rapport aux différentes informations.

    On voudra ensuite le nom du magasin et du marchand:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        //Get name of store and storekeeper
        short *storeNameIndex = (short*) (data + 0x155f9 + merchantIndex * 2);
        char *storeName = 62067 + data + (*storeNameIndex);
     
        short *merchantNameIndex = (short*) (data + 0x15603 + merchantIndex * 2);
        char *merchantName = 62067 + data + (*merchantNameIndex);
        setName (merchantName);
    C'est codé en dur parce que de toute facon cela est lié aux fichiers données du jeu ;-)

    On récupére le prix de la nourriture pour ce magasin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        short *foodPrice = (short*) (data + 0x155ef + merchantIndex * 2);
    Enfin, et plus simple, on ajoute le premier texte du marchand et on ajoute la gestion de l'achat de la nourriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        std::string start = "Welcome to ";
        start += storeName;
        addConversation ("first_text", start);
     
        addConversation ("buy", "We have food for you", BUY_CONVERSATION, true);
        addBuySell ("Food", 25, *foodPrice, false);
    }
    Le dernier appel, permet d'ajouter que c'est la nourriture qu'on propose, on le propose par paquet de 25 à un certain prix et c'est pour être vendu.

    En image, cela donne, au départ :
    Nom : Screenshot-Back to roots --- Version: 1.28.png
Affichages : 35
Taille : 167,7 Ko

    Une fois qu'on veut acheter :
    Nom : Screenshot-Back to roots --- Version: 1.28-1.png
Affichages : 42
Taille : 179,8 Ko

    Une fois qu'on en a acheté :
    Nom : Screenshot-Back to roots --- Version: 1.28-2.png
Affichages : 61
Taille : 198,7 Ko

    Jc

  19. #139
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut


    Par contre, la lecture du fichier par emplacement de mémoire en dur, cela me choque (j'aurais mis cela dans une macro, accéssible depuis un endroit unifié :p)
    Mais bon, si c'est vraiment du dur
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  20. #140
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par LittleWhite Voir le message


    Par contre, la lecture du fichier par emplacement de mémoire en dur, cela me choque (j'aurais mis cela dans une macro, accéssible depuis un endroit unifié :p)
    Mais bon, si c'est vraiment du dur
    C'est vraiment du dur, et généralement cela existe à un seul endroit. Je pourrai faire des const int partout mais franchement, là pour moi c'est du "set and forget" code.

    J'entame les deux derniers de cette ville : le tavernier et le guérisseur ;-)

    Jc

Discussions similaires

  1. [phpMyAdmin] [phpMyAdmin] Problème mot de passe Root !
    Par StouffR dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 26/09/2014, 11h59
  2. IDE vs programmation "roots" ?
    Par yoloosis dans le forum Débats sur le développement - Le Best Of
    Réponses: 44
    Dernier message: 27/01/2005, 00h37
  3. Comment change l'utilisateur root de mysql?
    Par silvermoon dans le forum Installation
    Réponses: 3
    Dernier message: 29/10/2003, 11h25
  4. probleme identification et mot de passe root
    Par freums dans le forum Débuter
    Réponses: 5
    Dernier message: 19/09/2003, 17h09
  5. Password root perdu !!
    Par Va(l)ve dans le forum Administration système
    Réponses: 8
    Dernier message: 18/08/2003, 22h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo