tera: la cité des cranes?

Réduire
X
 
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages
  • starlord
    Warrior

    • février 2006
    • 184

    #16
    je vais déja voir avec ulysse si un rendez vous est possible... Juste au cas ou, un lecteur 5 1/4 est fortement conseillé...

    Commentaire

    • starlord
      Warrior

      • février 2006
      • 184

      #17
      après avoir téléphoné à Ulysse, j'ai de très bonnes nouvelles à annoncer: la rencontre en vrai est possible et même fortement anticipée... Il nous attend avec ses exemplaires, ses archives et journaux et une multitude de documents plus précieux les uns que les autres...

      Hoagie, je t'envoie un PM dès maintenant... merci pour ton aide!

      Il y a suffisamment de choses chez Ulysse pour monter un dossier similaire à celui de M. Weill de ex loriciel lorsque une équipe est allée chez lui... peut être que d'autres membres de LTF seraient interessés d'y participer... pour autant qu'ils puissent se rendre à Tours... Par contre il a précisé qu'il veut toujours garder l'anonymat sous le num d'Ulysse.
      Dernière modification par starlord, 01 juin 2010, 09h30.

      Commentaire

      • Soteen
        Compte archivé

        • mai 2004
        • 2545

        #18
        Je ne connais pas ces jeux mais j'aimais bien Loriciel.

        Je veux bien participer. Je pourrais me déplacer à Tours en train mais cela dépendra du jour !
        [center]" Mieux vaut être saoûl que con, ça dure moins longtemps !! " [/center]

        Commentaire

        • starlord
          Warrior

          • février 2006
          • 184

          #19
          ok soten, merci pour l'aide!

          contacte hoagie, il te briefera sur la situation.

          Commentaire

          • Hoagie
            Abandonwarriors


            • mars 2005
            • 4785

            #20
            Suite du feuilleton...
            Y a t-il quelqu'un ici qui s'y connaît en déplombage de jeu ?

            Commentaire

            • Groovykid
              Banned

              • août 2001
              • 11165

              #21
              Envoyé par Hoagie Voir le message
              Suite du feuilleton...
              Y a t-il quelqu'un ici qui s'y connaît en déplombage de jeu ?
              Si quelqu'un s'y connait , ca m'intéresserait aussi !

              (mais bon j'ai déja été modéré une fois par ubn pour une demande similaire, pourtant ca peut etre intéressant pour des cheats)

              Commentaire

              • ergonomy_joe
                Swordsman


                • août 2010
                • 245

                #22
                ... quelques annees plus tard ...

                Alors finalement, cette rencontre avec Ulysse a-t-elle eu lieu ?
                Il y a peut-etre eu deja un debriefing dans un autre sujet, mais je ne l'ai pas trouve alors...
                Vous me pardonnerez si c'etait le cas.

                Commentaire

                • Hoagie
                  Abandonwarriors


                  • mars 2005
                  • 4785

                  #23
                  Oui, et les jeux sont sur le site.

                  Commentaire

                  • starlord
                    Warrior

                    • février 2006
                    • 184

                    #24
                    salut joe!

                    fais toi plaisir avec ces jeux!

                    je suis très fier du fait qu'ils se soient retrouvés sur le site. LTF possède des équipes très efficaces!
                    Dernière modification par starlord, 15 février 2012, 11h15.

                    Commentaire

                    • ergonomy_joe
                      Swordsman


                      • août 2010
                      • 245

                      #25
                      C'est cool tout ca

                      Pour la plupart des jeux je savais deja qu'ils etaient sur LTF; dans mon post, je pensais plutot a une eventuelle interview de Ulysse, ou la divulgation des codes source, ou d'autres infos encore ... Par exemple le pourquoi de la necessite de l'anonymat meme apres tant d'annees.

                      Pour tout vous dire, je suis en train de decompiler Tera (75% fait je dirais), mais entre-temps, je suis retombe sur ce thread. Si les sources de Tera sont deja disponible quelque part, ma demarche, pour autant amusante qu'elle soit, parait assez redondante non ?

                      Commentaire

                      • ergonomy_joe
                        Swordsman


                        • août 2010
                        • 245

                        #26
                        Histoire de deterer cette discussion, je vous mets une partie des resultats de la decompilation; pour ceux qui connaissent le jeu, c'est la partie dans l'espace lors de laquelle il faut degommer les vaisseaux des pirates ... tres stylises bien sur les vaisseaux. Si vous voulez, ca ressemble a ca:
                        Code:
                              ####                            ####      
                              ####                            ####      
                            ##++++##                        ##++++##    
                            ##++++##                        ##++++##    
                            ##++++##                        ##++++##    
                            ##++++##                        ##++++##    
                              ####  ##      ++    ++      ##  ####      
                              ####  ##      ++    ++      ##  ####      
                                      ##      ####      ##              
                                      ##      ####      ##              
                                        ##  ##++++##  ##                
                                        ##  ##++++##  ##                
                                        ################                
                                        ################                
                                        ##    ####    ##                
                                        ##    ####    ##                
                                      ####################              
                                      ####################              
                              ##############++++++++##############      
                              ##############++++++++##############      
                          ######..        ..########..        ..######  
                          ######..        ..########..        ..######  
                        ####..                ....                ..####
                        ####..                ....                ..####
                        Quant au source:

                        Code:
                        {SPACE SEQUENCE}
                        OVERLAY PROCEDURE OVL_00AE;
                        VAR
                        	_i:INTEGER;
                        	_shootX,_shootY:INTEGER;
                        	BP_0A:INTEGER;
                        	_alienX,_alienY:INTEGER;{in [-1,0,1]} 
                        	_energyBak:INTEGER;
                        	_niceShoot:BOOLEAN;
                        	BP_12:CHAR;
                        
                        {INNER_BA2F}PROCEDURE __DrawShoot;
                        BEGIN
                        	DRAW(155,134,_shootX,_shootY,3);
                        	DRAW(156,134,_shootX,_shootY,3);
                        	IF SoundFlag
                        	THEN SoundFx_4(6000,6,6)
                        	ELSE DELAY(30);
                        	DRAW(155,134,_shootX,_shootY,0);
                        	DRAW(156,134,_shootX,_shootY,0);
                        END;
                        
                        {INNER_BAE2}PROCEDURE __CheckShoot;
                        VAR BBP_06:INTEGER;
                        BEGIN
                        	_niceShoot := FALSE;
                        	IF KEYPRESSED = TRUE
                        	THEN BEGIN
                        		READ(KBD,BP_12);
                        		IF (BP_12 = '1') AND ((_alienX = -1) AND (_alienY = 1))
                        		THEN _niceShoot := TRUE;
                        		IF (BP_12 = '2') AND ((_alienX = 0) AND (_alienY = 1))
                        		THEN _niceShoot := TRUE;
                        		IF (BP_12 = '3') AND ((_alienX = 1) AND (_alienY = 1))
                        		THEN _niceShoot := TRUE;
                        		IF (BP_12 = '4') AND ((_alienX = -1) AND (_alienY = 0))
                        		THEN _niceShoot := TRUE;
                        		IF (BP_12 = '5') AND ((_alienX = 0) AND (_alienY = 0))
                        		THEN _niceShoot := TRUE;
                        		IF (BP_12 = '6') AND ((_alienX = 1) AND (_alienY = 0))
                        		THEN _niceShoot := TRUE;
                        		IF (BP_12 = '7') AND ((_alienX = -1) AND (_alienY = -1))
                        		THEN _niceShoot := TRUE;
                        		IF (BP_12 = '8') AND ((_alienX = 0) AND (_alienY = -1))
                        		THEN _niceShoot := TRUE;
                        		IF (BP_12 = '9') AND ((_alienX = 1) AND (_alienY = -1))
                        		THEN _niceShoot := TRUE;
                        
                        		IF _niceShoot
                        		THEN BEGIN
                        			_shootX := D_9B6E;
                        			_shootY := D_9B70;
                        			__DrawShoot;
                        		END ELSE BEGIN
                        			VAL(BP_12,BP_0A,BBP_06);
                        			IF (BP_0A < 4) AND (BP_0A > 0)
                        			THEN BEGIN {bottom line}
                        				_shootX := (BP_0A - 2) * 64 + 155;
                        				_shootY := 118;
                        				__DrawShoot;
                        			END ELSE IF (BP_0A < 7) AND (BP_0A > 0)
                        			THEN BEGIN {middle line}
                        				_shootX := (BP_0A - 5) * 64 + 155;
                        				_shootY := 90;
                        				__DrawShoot;
                        			END ELSE IF (BP_0A < 10) AND (BP_0A > 0)
                        			THEN BEGIN {top line}
                        				_shootX := (BP_0A - 8) * 64 + 155;
                        				_shootY := 66;
                        				__DrawShoot;
                        			END;
                        		END;
                        	END;
                        END;
                        
                        {INNER_BF05}PROCEDURE __ClearStatusText;
                        BEGIN
                        	GOTOXY(11,20);WRITE('                    ');
                        	GOTOXY(11,21);WRITE('                    ');
                        	GOTOXY(11,20);
                        END;
                        
                        {INNER_BF72}PROCEDURE __SpaceFight;
                        BEGIN
                        	Counter := NumPirates;
                        	REPEAT
                        		DELAY(RANDOM(10) * 100);
                        		_alienX := RANDOM(3) - 1;
                        		_alienY := RANDOM(3) - 1;
                        		WHILE KEYPRESSED
                        		DO READ(KBD,D_A678);
                        
                        		D_9B6E := 155 + _alienX * 4;
                        		D_9B70 := 90 + _alienY * 2;
                        		PLOT(D_9B6E,D_9B70,3);
                        		DELAY(300);
                        		PLOT(D_9B6E,D_9B70,0);
                        		WHILE KEYPRESSED
                        		DO READ(KBD,D_A678);
                        
                        		D_9B6E := 155 + _alienX * 8;
                        		D_9B70 := 90 + _alienY * 4;
                        		GetPic(D_ABD9,D_9B6E - 6,D_9B70 - 6,D_9B6E + 6,D_9B70 + 6);
                        		PutSprite((D_9B6E - 3) DIV 4,D_9B70 - 2,SPR_1F);
                        		DELAY(230);
                        		PutPic(D_ABD9,D_9B6E - 6,D_9B70 + 6);
                        
                        		D_9B6E := 155 + _alienX * 16;
                        		D_9B70 := 90 + _alienY * 6;
                        		GetPic(D_ABD9,D_9B6E - 12,D_9B70 - 6,D_9B6E + 12,D_9B70 + 6);
                        		PutSprite((D_9B6E - 6) DIV 4,D_9B70 - 4,SPR_1E);
                        		DELAY(200);
                        		PutPic(D_ABD9,D_9B6E - 12,D_9B70 + 6);
                        
                        		D_9B6E := 155 + _alienX * 32;
                        		D_9B70 := 90 + _alienY * 12;
                        		GetPic(D_ABD9,D_9B6E - 16,D_9B70 - 8,D_9B6E + 16,D_9B70 + 8);
                        		PutSprite((D_9B6E - 12) DIV 4,D_9B70 - 6,SPR_1D);
                        		DELAY(170);
                        		PutPic(D_ABD9,D_9B6E - 16,D_9B70 + 8);
                        
                        		D_9B6E := 155 + _alienX * 64;
                        		D_9B70 := 90 + _alienY * 24;
                        		GetPic(D_ABD9,D_9B6E - 28,D_9B70 - 14,D_9B6E + 28,D_9B70 + 14);
                        		PutSprite((D_9B6E - 24) DIV 4,D_9B70 - 12,SPR_43);
                        		DELAY(90);
                        		__CheckShoot;
                        		PutPic(D_ABD9,D_9B6E - 28,D_9B70 + 14);
                        
                        		IF _niceShoot = FALSE
                        		THEN BEGIN
                        			Sav.f_Energy := Sav.f_Energy - 5;
                        			Explosion(TRUE);
                        		END;
                        		__ClearStatusText;
                        		GOTOXY(15,21);
                        		WRITE('énergie = ',Sav.f_Energy,' ');
                        		IF _niceShoot
                        		THEN BEGIN
                        			NumPirates := NumPirates - 1;
                        			Counter := Counter - 1;
                        			IF NotDemo {-- in game --}
                        			THEN Sav.f_ExpPoints := Sav.f_ExpPoints + 3;
                        		END;
                        		Counter := Counter - 1;
                        	UNTIL (Counter < 1) OR (Sav.f_Energy < 5);
                        
                        	IF Sav.f_Energy < 5
                        	THEN BEGIN
                        		__ClearStatusText;
                        		WRITE(' BARRIERE D''ENERGIE');
                        		GOTOXY(17,21);
                        		WRITE('SAUTE !');
                        		IF SoundFlag
                        		THEN SoundFx_6(10000);
                        		FOR _i := 1 TO 4
                        		DO Explosion(TRUE);
                        		HALT;
                        	END;
                        END;
                        
                        BEGIN
                        	CurrentPalette := 3;
                        	SetGraphicMode(3);
                        
                        	ASSIGN(D_0268,C_41AD[1]);
                        	RESET(D_0268);
                        	READ(D_0268,D_0260^);
                        	CLOSE(D_0268);
                        	MOVE(D_0260^,C_41FC,$4000);
                        
                        	Screen2Off;
                        	Off2Screen;
                        	IF NotDemo
                        	THEN BEGIN {-- in game --}
                        		__ClearStatusText;
                        		WRITE('énergie disponible :');
                        		GOTOXY(18,21);
                        		WRITE(Sav.f_Energy);
                        		DELAY(2000);
                        		__ClearStatusText;
                        		WRITE('ravitaillement O/N ?');
                        		D_A679 := ReadChar;
                        		IF D_A679 = 'O'
                        		THEN BEGIN
                        			__ClearStatusText;
                        			WRITE('nombre de containers');
                        			GOTOXY(11,21);
                        			WRITE('(50 p.o. l''unité) ?');
                        			GOTOXY(11,22);
                        			ReadDigit;
                        			GOTOXY(11,22);
                        			WRITE('                    ');
                        			IF (D_9B64 * 50) < (Sav.f_Money + 1)
                        			THEN BEGIN
                        				Sav.f_Money := Sav.f_Money - 50 * D_9B64;
                        				Sav.f_Energy := Sav.f_Energy + 50 * D_9B64;
                        			END ELSE BEGIN
                        				__ClearStatusText;
                        				WRITE('compte à découvert !');
                        				Beep;
                        			END;
                        		END;
                        	END ELSE BEGIN {-- demo version --}
                        		_energyBak := Sav.f_Energy;
                        		Sav.f_Energy := 50;
                        		NumPirates := 8;
                        	END;
                        	FOR _i := 1 TO 24
                        	DO PLOT(RANDOM(200) + 60,RANDOM(90) + 40,3);
                        
                        	IF NotDemo
                        	THEN BEGIN {-- in game --}
                        		__ClearStatusText;
                        
                        		WRITE('  SAUT HYPERESPACE');
                        		IF SoundFlag
                        		THEN SoundFx_8
                        		ELSE DELAY(2000);
                        		Screen2Off;
                        		FOR _i := 1 TO 4
                        		DO Explosion(TRUE);
                        		FOR _i := 1 TO 24
                        		DO PLOT(RANDOM(200) + 60,RANDOM(90) + 40,3);
                        	END;
                        
                        	__ClearStatusText;
                        	WRITE('     LES PIRATES   ');
                        	GOTOXY(15,21);
                        	WRITE('  de SHAAM !');
                        	IF SoundFlag
                        	THEN SoundFx_4(200,2,200)
                        	ELSE DELAY(3000);
                        	__SpaceFight;
                        
                        	IF NotDemo
                        	THEN BEGIN {-- in game --}
                        		__ClearStatusText;
                        		DELAY(1000);
                        		WRITE('  SAUT HYPERESPACE');
                        		IF SoundFlag
                        		THEN SoundFx_8
                        		ELSE DELAY(2000);
                        		Screen2Off;
                        		FOR _i := 1 TO 4
                        		DO Explosion(TRUE);
                        		FOR _i := 1 TO 24
                        		DO PLOT(RANDOM(200) + 60,RANDOM(90) + 40,3);
                        
                        		IF Sav.f_Energy > 25
                        		THEN Sav.f_Energy := Sav.f_Energy - 25
                        		ELSE Sav.f_Energy := 5;
                        		__ClearStatusText;
                        		WRITE('    energie = ',Sav.f_Energy,' ');
                        		IF SoundFlag
                        		THEN SoundFx_9;
                        		Sav.f_Days := Sav.f_Days + 7
                        	END ELSE BEGIN
                        		Sav.f_Energy := _energyBak;
                        	END;
                        END;
                        Niveau code c'est, a mon avis, la partie la plus lisible.

                        Sinon la decompilation est finie (9 octets de difference avec le fichier TERA.COM original); il ne reste qu'a renommer certaines variables et fonctions et, s'il n'y a pas d'objections, je poste le tout.

                        Niveau technique, c'est du turbo pascal (la version 3.01A); Ulysse a utilise les overlays et quelques acces direct a la memoire du PC (avec le mot-clef ABSOLUTE) mais a part ca, c'est du pur pascal.



                        Bonne lecture
                        Dernière modification par ergonomy_joe, 19 décembre 2014, 06h01.

                        Commentaire

                        • karamoon
                          Barbarian


                          • janvier 2006
                          • 343

                          #27
                          Je viens de tester le jeu car j'ai tout juste découvert la discussion, il faut être nostalgique pour jouer à ce jeu, dur dur quand on ne le connait pas. C'est pas très clair ce qu'il faut faire.
                          Enfin bref ma curiosité est satisfaite, sur un jeu Loriciel qui m'était inconnu.

                          Je n'ai pas vu de protection, le jeu n'a pas nécessité de modification à ce niveau ?

                          Commentaire

                          • ergonomy_joe
                            Swordsman


                            • août 2010
                            • 245

                            #28
                            @karamoon

                            pas de protection pour ce jeu. Par contre comme tu le fais remarquer l'objectif du jeu n'est pas facile a aprehender; c'est peut etre une autre forme de protection anti-copie ? ;-)

                            D'apres le source, il y a quatre taches a accomplir pour arriver la victoire. Les taches sont independantes il me semble.
                            - Invoquer un nom precis sur Meduz (et pour aller sur meduz il font encore monter en haut de la pyramide et y invoquer quelqu'un d'autre)
                            - Obtenir l'appui des medias (ca consiste a explorer un base sur Alfol pour trouver le bureau des medias, et leur donner 1000 ducats)
                            - Tuer Arioch (bien sur en etant assez costaud pour ca, et puis apres lui avoir mis la main dessus)
                            - Tuer un copain d'Arioch (apres avoir decouvert son nom, et l'avoir invoquer devant l'autel des tenebres)

                            Le gros du jeu consiste a explorer le plus possible de lieux, augmenter ses stats, parler au plus possible de monde pour apprendre les noms importants (invocations ...) et les points faibles des big bosses (en gros, a quels armes/objets ils sont vulnerables).

                            Je poste le source en l'etat. Il y aurait beaucoup a faire pour le rendre plus lisible, mais je n'ai pas trop le temps de m'en occuper (enfin si ca me reprend, je ferai quand meme des mises a jours):
                            TERA_SRC_20150107.zip

                            Comme je l'ai deja signale, le compilateur original est "Turbo Pascal 3.01A". Ulysse a modifie quelques messages d'erreurs directement dans le compilateur, si ca vous amuse de retrouver lesquels...
                            Et pour afficher/editer les fichiers sources correctement il vous faut IMPERATIVEMENT un editeur texte qui gere la page de code 437 (sinon au revoir les caracteres accentues, et puis surtout impossibilite de compiler).

                            bon retrodev!

                            Commentaire

                            • herge79
                              Nomad

                              • juillet 2023
                              • 1

                              #29
                              Bonjour à tous,

                              Etant un nostalgique de ce jeu que j'avais eu du mal à finir à l'époque (qui peut deviner qu'il faut presser 'm' pour méditer à MEDUZ), j'ai regardé le code source disponible avec intérêt.

                              Celui-ci semble incomplet toutefois: je ne vois pas par exemple la partie combat (il y a une fonction SpawnMonster qui est déclarée, ou FightSequence, où sont-elles implémentées), ni la partie relative à la montée de niveau.
                              Le code référence des fichiers KBD.INC ou TERAUTIL.INC, je ne les vois pas présents dans l'archive.

                              Commentaire

                              Chargement...