Zombi (UBI SOFT) et Dosbox

Réduire
X
 
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages
  • ergonomy_joe
    Swordsman


    • août 2010
    • 245

    #1

    Zombi (UBI SOFT) et Dosbox

    Je n'arrive pas a faire tourner Zombi sur Dosbox. Je sais ca parait curieux, un grand classique comme ca, et personne n'aurait encore releve de probleme ? .... il n'y a qu'une explication: je dois faire une fausse manip'.

    Mon probleme
    J'utilise la derniere version de Dosbox, la 0.74, en mode CGA (la palette est plus adaptee). Le jeu se lance sans probleme: generique, splash screen, et puis l'ecran principal de jeu.
    Et au bout de quelques seconde, l'image de FIN du jeu, celle ou tout le monde devient zombi.

    Mon hypothese
    Alors apres quelques recherches, j'ai trouve que Zombi utilise deux fonctions DOS (2Ch, et 2Dh; lire/ecrire la date systeme) pour la gestion du temps dans le jeu. Et si on en croit le source de Dosbox:
    Code:
    	case 0x2d:		/* Set System Time */
    		LOG(LOG_DOSMISC,LOG_ERROR)("DOS:Set System Time not supported");
    		//Check input parameters nonetheless
    		if( reg_ch > 23 || reg_cl > 59 || reg_dh > 59 || reg_dl > 99 )
    			reg_al = 0xff; 
    		else reg_al = 0;
    		break;
    Ah ben voila, donc c'est normal que le jeu ne fonctionne pas. Mais alors pourquoi le jeu aparait comme "supported" sur le site de Dosbox ?

    En conclusion
    Vous comprenez mon desarroi... alors est-ce que quelqu'un a reussi a faire tourner ce jeu sous Dosbox deja ? Est-ce qu'il existe plusieurs versions de Zombi en abandonware et j'aurais telecharge la mauvaise ?

    Donc si quelqu'un a une explication ...
  • DragonsLover
    General


    • octobre 2004
    • 1724

    #2
    Je te recommanderais de jouer à la version Atari ST ou Amiga via émulateur. Non seulement les graphismes et peut-être même la musique y sont de meilleure qualité, mais en plus, tu n'auras aucun bug de ce genre.
    J'adore les dragons! Ils sont le centre de ma vie! Je ne les oublierai jamais...

    Cliquez ici pour visiter mes dragons et les aider à grandir. Ils vous en seraient très reconnaissant!

    Commentaire

    • ergonomy_joe
      Swordsman


      • août 2010
      • 245

      #3
      Envoyé par DragonsLover Voir le message
      Je te recommanderais de jouer à la version Atari ST ou Amiga via émulateur. Non seulement les graphismes et peut-être même la musique y sont de meilleure qualité, mais en plus, tu n'auras aucun bug de ce genre.
      Merci pour la response, mais je me rends compte que mon post n'etais peut-etre pas assez clair. Quand je demande si il existe plusieurs versions du jeu, je voulais parler de versions PC (avec un patch par exemple).

      Et plus generalement, est-ce que quelqu'un a deja reussi a faire tourner le jeu sous Dosbox ?

      Commentaire

      • batjijo
        Ectoplasme Ambulant


        • août 2001
        • 8130

        #4
        J'ai essayé mais pas réussi.
        J'ai même essayé des vielles version de Dosbox sans aucun résultat

        Même problème constaté sur le jeu Hurlement.

        Le jeu débute et d'un coup la barre vie défile à une vitesse hallucinante.
        Des fois en diminuant la vitesse de dosbox et en déplacent vite les personnages, j'avais une chance de jouer sinon c'était fini en moins de deux.

        Pas essayé cette méthode avec Zombi.
        Club de la Batte Cloutée

        Commentaire

        • ergonomy_joe
          Swordsman


          • août 2010
          • 245

          #5
          Envoyé par batjijo Voir le message
          J'ai essayé mais pas réussi.
          J'ai même essayé des vielles version de Dosbox sans aucun résultat

          Même problème constaté sur le jeu Hurlement.

          Le jeu débute et d'un coup la barre vie défile à une vitesse hallucinante.
          Des fois en diminuant la vitesse de dosbox et en déplacent vite les personnages, j'avais une chance de jouer sinon c'était fini en moins de deux.

          Pas essayé cette méthode avec Zombi.
          He bien je me sens un peu moins seul deja.
          Pour Hurlements, vu que c'est la meme equipe de developpement (enfin a ce qu'il me semble) et le meme genre de jeu, il y a des chances que ca soit le meme systeme de gestion du temps de jeu; d'ou des symptomes similaires.

          Trouverons-nous un troisieme larron pour nous tenir compagnie ?

          Commentaire

          • stephh
            General

            • janvier 2009
            • 1721

            #6
            Envoyé par ergonomy_joe Voir le message
            Mon hypothese
            Alors apres quelques recherches, j'ai trouve que Zombi utilise deux fonctions DOS (2Ch, et 2Dh; lire/ecrire la date systeme) pour la gestion du temps dans le jeu. Et si on en croit le source de Dosbox:
            Code:
            	case 0x2d:		/* Set System Time */
            		LOG(LOG_DOSMISC,LOG_ERROR)("DOS:Set System Time not supported");
            		//Check input parameters nonetheless
            		if( reg_ch > 23 || reg_cl > 59 || reg_dh > 59 || reg_dl > 99 )
            			reg_al = 0xff; 
            		else reg_al = 0;
            		break;
            Ah ben voila, donc c'est normal que le jeu ne fonctionne pas.
            Il n'y a pas de d'heure invalide puisqu'il n'y a pas de message d'erreur. Il doit donc y avoir autre chose parce qu'effectivement le temps avance très vite.

            Steph

            Commentaire

            • DragonsLover
              General


              • octobre 2004
              • 1724

              #7
              Quand tu dis quelques secondes, c'est de combien?

              J'viens tout juste d'essayer et je n'ai pas rencontré de problème immédiat. Le texte peut défiler rapidement, mais il suffit de diminuer les cycles. Pour le temps, peu importe le nombre de cycles utilisé, il semble filer de manière constante à la même vitesse.

              Je vois vraiment pas où est le problème...
              J'adore les dragons! Ils sont le centre de ma vie! Je ne les oublierai jamais...

              Cliquez ici pour visiter mes dragons et les aider à grandir. Ils vous en seraient très reconnaissant!

              Commentaire

              • ergonomy_joe
                Swordsman


                • août 2010
                • 245

                #8
                Envoyé par stephh Voir le message
                Il n'y a pas de d'heure invalide puisqu'il n'y a pas de message d'erreur. Il doit donc y avoir autre chose parce qu'effectivement le temps avance très vite.

                Steph
                Je ne vois pas trop ce que tu entends par heure invalide, mais enfin pour plus de precisions, voila comment ca se passe dans le monde de zombi question gestion de temps:
                • une des premieres choses que fait le programme apres lancement, est de positionner l'heure systeme (la fameuse fonction 2d) a 11h15 (ou un truc dans le genre), ce qui echoue sur dosbox, mais sans generer d'erreur (cf code).
                • a intervalle regulier, il consulte l'heure systeme (fonction 2c) et calcule la difference avec son "heure de reference", 11h15.
                • une difference de 5 secondes reelles (a verifier ici aussi) correspond a une minute de temps de jeu, ce qui explique que le temps semble defiler vite, et ca ne devrait pas avoir de rapport avec le nombre de cycles ... enfin pas direct en tous les cas


                Alors c'est vrai que je n'avais pas pense a ca, mais peut-etre quel e fait que vous n'ayez pas eu de probleme pourrait etre lie au fait que vous ayez lance le jeu tot ce matin (donc proche de l'heure de debut du jeu). Reessayez plusieurs fois au cours de la journee et vous devriez voir l'horloge du jeu afficher un horaire de plus en plus tardif; au final, vous n'aurez meme plus le temps de rien faire, vous irez a la page game over directement.
                Si ce n'est pas le cas .... he bien ....

                PS: je viens d'editer le message en remplacant 6h30 par 11h15
                Dernière modification par ergonomy_joe, 01 février 2011, 07h10.

                Commentaire

                • stephh
                  General

                  • janvier 2009
                  • 1721

                  #9
                  Envoyé par ergonomy_joe Voir le message
                  Je ne vois pas trop ce que tu entends par heure invalide, mais enfin pour plus de precisions, voila comment ca se passe dans le monde de zombi question gestion de temps :
                  • une des premieres choses que fait le programme apres lancement, est de positionner l'heure systeme (la fameuse fonction 2d) a 11h15 (ou un truc dans le genre), ce qui echoue sur dosbox, mais sans generer d'erreur (cf code).
                  • a intervalle regulier, il consulte l'heure systeme (fonction 2c) et calcule la difference avec son "heure de reference", 11h15.
                  • une difference de 5 secondes reelles (a verifier ici aussi) correspond a une minute de temps de jeu, ce qui explique que le temps semble defiler vite, et ca ne devrait pas avoir de rapport avec le nombre de cycles ... enfin pas direct en tous les cas

                  Alors c'est vrai que je n'avais pas pense a ca, mais peut-etre quel e fait que vous n'ayez pas eu de probleme pourrait etre lie au fait que vous ayez lance le jeu tot ce matin (donc proche de l'heure de debut du jeu). Reessayez plusieurs fois au cours de la journee et vous devriez voir l'horloge du jeu afficher un horaire de plus en plus tardif; au final, vous n'aurez meme plus le temps de rien faire, vous irez a la page game over directement.
                  Pour avoir lancé le jeu plusieurs fois cette nuit, effectivement, plus on lance le jeu (et donc on avance l'heure réelle), et plus l'heure de début du jeu est tardive (et ne correspond à rien d' "évident" qui plus est).

                  Maintenant je vais d'abord voir ce soir ou demain ce qu'il en est pour cette histoire d'erreur "invisible" quand on utilise la fonction 0x2d avant de penser à régler cette histoire d'avancement trop rapide ...

                  Edit:

                  Il y a des fois où je me demande si je ne suis pas débile

                  Dans l'émulateur, il n'y a rien de surprenant à ce que la fonction 0x2d ne fasse rien (sinon ce serait chiant à gérer - je n'entre pas dans les détails), et donc fatalement, quand on appelle ensuite la fonction 0x2c, ça renvoie une mauvaise valeur.

                  Donc en fait, ce qu'il faudrait, c'est détourner la fonction 0x2c de manière à rajouter l'heure de début du jeu de manière à ce que quand la soustraction se fait, on n'ait que le temps réel écoulé depuis le début de la partie (et ensuite le jeu se charge de convertir cette différence réelle en heure pour le jeu).

                  J'ai vérifié sur la version Amstrad 6128 via CaPriCe32, le jeu débute à 10h15 (et non 11h15), et effectivement, 5 secondes réelles correspondent à 1 minute dans le jeu.

                  Donc pour résumer, voici ce que doit faire dans le résident la nouvelle fonction 0x2c en pseudo-code (à traduire ensuite en assembleur x86, ce qui ne devrait pas poser de problème) :
                  Code:
                  Appel à la fonction 0x2c d'origine
                  CL += 15
                  si CL >= 60
                  alors
                    CL -= 60
                    CH += 1
                  finsi
                  CH += 10
                  si CH >= 24
                  alors
                    CH -= 24
                  finsi
                  Logiquement, ça devrait marcher (ou alors un truc m'échappe) ...

                  Après, pourquoi le jeu va trop vite est une autre histoire que je n'ai pour l'instant pas cherché à comprendre ...

                  Steph
                  Dernière modification par stephh, 01 février 2011, 18h35.

                  Commentaire

                  • ergonomy_joe
                    Swordsman


                    • août 2010
                    • 245

                    #10
                    Envoyé par stephh Voir le message
                    Pour avoir lancé le jeu plusieurs fois cette nuit, effectivement, plus on lance le jeu (et donc on avance l'heure réelle), et plus l'heure de début du jeu est tardive (et ne correspond à rien d' "évident" qui plus est).

                    Maintenant je vais d'abord voir ce soir ou demain ce qu'il en est pour cette histoire d'erreur "invisible" quand on utilise la fonction 0x2d avant de penser à régler cette histoire d'avancement trop rapide ...

                    Edit:

                    Il y a des fois où je me demande si je ne suis pas débile

                    Dans l'émulateur, il n'y a rien de surprenant à ce que la fonction 0x2d ne fasse rien (sinon ce serait chiant à gérer - je n'entre pas dans les détails), et donc fatalement, quand on appelle ensuite la fonction 0x2c, ça renvoie une mauvaise valeur.

                    Donc en fait, ce qu'il faudrait, c'est détourner la fonction 0x2c de manière à rajouter l'heure de début du jeu de manière à ce que quand la soustraction se fait, on n'ait que le temps réel écoulé depuis le début de la partie (et ensuite le jeu se charge de convertir cette différence réelle en heure pour le jeu).

                    J'ai vérifié sur la version Amstrad 6128 via CaPriCe32, le jeu débute à 10h15 (et non 11h15), et effectivement, 5 secondes réelles correspondent à 1 minute dans le jeu.

                    Donc pour résumer, voici ce que doit faire dans le résident la nouvelle fonction 0x2c en pseudo-code (à traduire ensuite en assembleur x86, ce qui ne devrait pas poser de problème) :
                    Code:
                    Appel à la fonction 0x2c d'origine
                    CL += 15
                    si CL >= 60
                    alors
                      CL -= 60
                      CH += 1
                    finsi
                    CH += 10
                    si CH >= 24
                    alors
                      CH -= 24
                    finsi
                    Logiquement, ça devrait marcher (ou alors un truc m'échappe) ...

                    Après, pourquoi le jeu va trop vite est une autre histoire que je n'ai pour l'instant pas cherché à comprendre ...

                    Steph
                    Merci de t'investir autant Steph, je n'en demandais pas tant

                    Mais sinon, je dois etre fatigue moi aussi, parce que la logique de ton code m'echappe. Si je comprends bien, ta fonction 0x2c patchee renvoie la date systeme majoree de 15 minutes ? Quel est l'interet ?

                    Pour faire marcher Zombi sur Dosbox j'ai plutot l'impression qu'il faudrait patcher les deux fonctions getTime et setTime (respectivement 0x2c et 0x2d). Un truc genre:
                    Code:
                    [I]setTime()[/I]
                    stocker les valeurs recues en parametre -> A
                    stocker les valeurs retour de la fonction [I]getTime() non patchee[/I] -> B
                    
                    [I]getTime()[/I]
                    lire les valeurs retour de [I]getTime() non patchee[/I] faire la difference avec B -> C
                    renvoyer A + C
                    Enfin quoi qu'il en soit, est-ce que ca confirme le fait que Zombi ne marche pas sous Dosbox alors ? Tout au moins selon l'heure a laquelle on le lance ?

                    Commentaire

                    • stephh
                      General

                      • janvier 2009
                      • 1721

                      #11
                      Envoyé par ergonomy_joe Voir le message
                      Merci de t'investir autant Steph, je n'en demandais pas tant

                      Mais sinon, je dois etre fatigue moi aussi, parce que la logique de ton code m'echappe. Si je comprends bien, ta fonction 0x2c patchee renvoie la date systeme majoree de 15 minutes ? Quel est l'interet ?
                      Regarde bien : tu majores les minutes de 15 ET les heures de 10 (heure de début du jeu) ...

                      Maintenant je me rends compte de 2 erreurs dans ma conception :

                      1) Il ne faut pas chercher à faire de tests si on dépasse les 60 minutes ou les 24 heures, mais garder le résultat tel quel sinon quand on va faire la soustraction avec l'heure de départ, ça va faire n'importe quoi.

                      2) Il faut prévoir le cas où tu dépasses minuit (0h00) pendant une partie (en commençant par exemple à 23h55), mais j'avoue ne pas encore trop savoir comment gérer ça à part effectivement stocker l'heure de départ.

                      Pour faire marcher Zombi sur Dosbox j'ai plutot l'impression qu'il faudrait patcher les deux fonctions getTime et setTime (respectivement 0x2c et 0x2d). Un truc genre:
                      Code:
                      [I]setTime()[/I]
                      stocker les valeurs recues en parametre -> A
                      stocker les valeurs retour de la fonction [I]getTime() non patchee[/I] -> B
                      
                      [I]getTime()[/I]
                      lire les valeurs retour de [I]getTime() non patchee[/I] faire la difference avec B -> C
                      renvoyer A + C
                      Il y a un truc que je ne sais pas pour le moment, c'est si la fonction 0x2d est appelée une fois au début du jeu, ou à chaque fois avant l'appel de la fonction 0x2c.

                      Apparemment, au début du jeu, l'heure système est fixée à 00:00:00 et ensuite on lit régulièrement l'heure système sur laquelle on applique différents calculs pour avoir l'heure du jeu.

                      Evidemment, avec une heure de base à 00:00:00, les calculs sont grandement simplifiés et du fait de l' "accélération" voulue par le jeu (5 secondes réelles = 1 minute du jeu), on n'a jamais de problème de débordement (il faudrait d'ailleurs que je vois sur l'Amstrad l'heure de fin, celle où tout le monde devient zombie).

                      Concernant ton code, ça pourrait être bon, mais comme l'heure de départ est apparemment fixée à 00:00:00 et vu que c'est le jeu qui s'occupe apparemment de calculer l'écart réel et de le convertir en temps de jeu, peut-être peut-on justement le simplifier ...

                      Enfin quoi qu'il en soit, est-ce que ca confirme le fait que Zombi ne marche pas sous Dosbox alors ? Tout au moins selon l'heure a laquelle on le lance ?
                      Je serais tenté de dire que non ça ne marche pas puisque l'heure de départ du jeu est fausse (il n'est jamais 10:15) => soit on se débrouille pour faire un résident qui fonctionne, soit c'est à Dosbox de prendre ça en compte quand ils émulent les fonctions 0x2c et 0x2d (ce qui serait beaucoup plus logique et permettrait de ne pas avoir le même problème sur d'autres jeux).

                      Steph

                      Commentaire

                      • Victor
                        Nettoyeur


                        • mars 2004
                        • 5316

                        #12
                        Pourquoi ne pas soumettre vos idées directement sur le forum de Dosbox?
                        Ca a beau être intéressant mais là franchement on n'y comprend plus rien, même moi alors que j'ai quand même quelques notions en programmation.
                        Je dis ça car la discussion a l'ait d'être un peu stérile en dehors des échanges entre vous deux.
                        Il y aura à mon avis plus de retour là-bas.
                        Bref, à vous de voir.
                        Bon ben je vais aller nettoyer les pc !

                        Commentaire

                        • Godcedric
                          Bob le bio-couleur


                          • mai 2001
                          • 13315

                          #13
                          Moi j'ai décroché depuis quelques posts déjà.
                          POUR LES CHANGEMENTS DE CD DANS UN JEU EN INSTALLATION FACILE (et pour Dosbox en général), IL FAUT FAIRE LA COMBINAISON DE TOUCHES CTRL F4.

                          NOTEZ QU'A CHAQUE DÉMARRAGE D'UN JEU INSTALLATION FACILE, UNE AIDE S'AFFICHE. MERCI DE LIRE AVANT D'APPUYER DIRECTEMENT SUR UNE TOUCHE POUR JOUER. CA PREND 5 SECONDES A LIRE ET CA ÉVITE DE CHERCHER UNE DEMIE JOURNÉE POUR TROUVER LA RÉPONSE.

                          Merci.

                          Commentaire

                          • stephh
                            General

                            • janvier 2009
                            • 1721

                            #14
                            Au départ, la question avait sa place ici puisqu'on ne savait pas d'où venait le problème (et s'il y avait effectivement un problème). Mais maintenant qu'il s'avère que c'est la "faute" de Dosbox, on peut effectivement leur laisser le message (et éventuellement continuer nos échanges en MP).

                            Steph

                            Commentaire

                            • ergonomy_joe
                              Swordsman


                              • août 2010
                              • 245

                              #15
                              Desole, on a du se laisser emporter ...

                              Reste maintenant a trouver un "volontaire" pour partir a l'assaut des forums Dosbox

                              Sinon, un poil hors-sujet, mais y a-t-il une raison pour laquelle Zombi n'est pas present sur le serveur de Abandonware France ? Est-ce justement lie a ce probleme d'emulation ?

                              Commentaire

                              Chargement...