Le Maitre des Ames - Protection anti-copie

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


    • août 2010
    • 245

    #16
    Envoyé par karamoon Voir le message
    Effectivement c'est plus compliqué que je le pensais et ça ne me surprend pas que je n'ai pas réussi.
    Ceci-dit je suis curieux de voir le résultat, tu peux p-e poster ton travail sur Megaupload ou alors je te donne mon adresse en MP (si c'est possible).

    Dans tous les cas merci de ta réponse.
    Salut Karamoon,

    Merci pour ton interet, mais par contre ca m'embete un peu de t'envoyer le code source comme ca en prive. Bien sur dans mon esprit je comptais bien un jour les mettre a disposition de qui ca interesse, mais je le voyais plutot sur un site "ouvert", genre avec gestion des sources, possibilite pour d'autres personnes de les modifier, etc. Donc si tu te sens de prendre en charge la gestion d'un tel site, je suis partant.

    Enfin voila quoi, est-ce que tu pourrais me donner un peu plus d'infos sur ce que tu comptes faire ?
    Je suis desole de faire le maniaque, mais j'ai passe pas mal de temps sur ce code,
    ca me ferait plaisir qu'il serve a un beau "projet"

    Pour commencer voila le source de MA.COM, le fichier qui gere le "generique":

    Code:
    {$I-} {$C-} {$K-} {$V-} {$F4}
    {CODE:$0674}
    {DATA:$0380}
    PROGRAM MA;
    
    
    TYPE
        tFileCluster = ARRAY[0..255] OF ARRAY[0..127] OF BYTE;
        tDtaInfo = RECORD CASE INTEGER OF
            1:(blockIdx, blocksNum:INTEGER; width, height:BYTE);
            2:(f0, f1:BYTE);
        END;
        tDecor = ARRAY[1..40] OF ARRAY[1..3] OF BYTE;
        tDecorArray = ARRAY[1..4] OF tDecor;
        tRegs = RECORD CASE INTEGER OF
            1:(AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags:INTEGER);
            2:(AL,AH,BL,BH,CL,CH,DL,DH:BYTE);
        END;
        tSpriteInfo = RECORD
            scrOfs:INTEGER; {src offset on screen}
            width, height:BYTE
        END;
        tSpriteBuffer = ARRAY[0..255] OF BYTE;
        tTextItem = ARRAY[1..3] OF STRING[20];
    
    CONST
        G_SEG:INTEGER = $B800; {C_2823}
    
        TXTCOL1:INTEGER = 0; {C_2825}
        TXTCOL2:INTEGER = $FFFF; {C_2827}
    
        C_2829:ARRAY[0..3] OF INTEGER = ($0000, $5555, $AAAA, $FFFF);
    
    VAR 
        {$I ..\LIB\DATA.PAS}
        D_0B72:FILE;
        D_0BBE:INTEGER;
    
        C_2831:^BYTE ABSOLUTE $b800:$0000;
    
    {$I MA_CP.PAS}
    
    {$I ..\LIB\MA_CHAR.PAS}
    
    {$I MA_LIB.PAS}
    
    PROCEDURE C_30C0(DUMMY:BYTE);
    BEGIN
    END;
    
    PROCEDURE C_30D0(BP04:BYTE);
    BEGIN
        D_0286 := BP04;
        TXTCOL1 := C_2829[D_0286];
    END;
    
    PROCEDURE C_30F7(BP04:BYTE);
    BEGIN
        D_0288 := BP04;
        TXTCOL2 := C_2829[D_0288];
    END;
    
    PROCEDURE C_311E;
    BEGIN
        INLINE(
            $31/$D2/              {XOR	DX,DX}
            $8E/$C2/              {MOV	ES,DX}
            $26/$8B/$16/$63/$04/  {MOV	DX,ES:[0463h]}
            $83/$C2/$06/          {ADD	DX,+06}
    
            $EC/                  {IN	AL,DX}
            $A8/$08/              {TEST	AL,8}
            $75/$FB/              {JNZ	C_3131}
    
            $FA/                  {CLI}
    
            $EC/                  {IN	AL,DX}
            $A8/$08/              {TEST	AL,8}
            $74/$FB/              {JZ	C_3137}
            $FB                   {STI}
        );
    END;
    
    CONST C_3144:ARRAY[1..3] OF INTEGER = (1,9,1);
    
    PROCEDURE C_314A;
    VAR BP_04:INTEGER;
    BEGIN
        IF RANDOM(10) = 0
        THEN BEGIN
            FOR BP_04 := 1 TO 3
            DO BEGIN
                GRAPHBACKGROUND(C_3144[BP_04]);
                DELAY($12);
            END;
            GRAPHBACKGROUND(0);
        END
        ELSE BEGIN
            DELAY($37);
        END;
    END;
    
    CONST
        FQ_A_0 = $0041;
        FQ_C_0 = $004D;
        FQ_D_0 = $0057;
        FQ_Ds0 = $005C;
        FQ_E_0 = $0061;
        FQ_F_0 = $0067;
        FQ_G_0 = $0074;
        FQ_A_1 = $0082;
        FQ_B_1 = $0092;
        FQ_C_1 = $009B;
        FQ_D_1 = $00AE;
        FQ_E_1 = $00C3;
        FQ_F_1 = $00CF;
        FQ_G_1 = $00E9;
        FQ_A_2 = $0105;
    
    CONST C_31AA:ARRAY[1..$8B] OF INTEGER = (
        FQ_A_0,FQ_E_0,FQ_G_0,FQ_E_0,FQ_A_0,FQ_E_0,FQ_G_0,FQ_E_0,
        FQ_C_0,FQ_G_0,FQ_A_1,FQ_G_0,FQ_C_0,FQ_G_0,FQ_A_1,FQ_G_0,
        FQ_D_0,FQ_G_0,FQ_C_1,FQ_G_0,FQ_D_0,FQ_G_0,FQ_C_1,FQ_G_0,
        FQ_D_0,FQ_G_0,FQ_B_1,FQ_G_0,FQ_D_0,FQ_G_0,FQ_B_1,FQ_G_0,
        FQ_A_0,FQ_E_0,FQ_G_0,FQ_E_0,FQ_A_0,FQ_E_0,FQ_G_0,FQ_E_0,
        FQ_C_0,FQ_G_0,FQ_A_1,FQ_G_0,FQ_C_0,FQ_G_0,FQ_A_1,FQ_G_0,
        FQ_D_0,FQ_G_0,FQ_C_1,FQ_G_0,FQ_D_0,FQ_G_0,FQ_C_1,FQ_G_0,
        FQ_D_0,FQ_G_0,FQ_B_1,FQ_G_0,FQ_D_0,FQ_G_0,FQ_B_1,FQ_G_0,
        FQ_E_0,FQ_A_1,FQ_E_1,FQ_A_1,FQ_E_0,FQ_A_1,FQ_E_1,FQ_A_1,
        FQ_A_1,FQ_E_1,FQ_A_2,FQ_E_1,FQ_A_1,FQ_E_1,FQ_A_2,FQ_E_1,
        FQ_G_0,FQ_D_1,FQ_G_1,FQ_D_1,FQ_G_0,FQ_D_1,FQ_G_1,FQ_D_1,
        FQ_F_0,FQ_C_1,FQ_F_1,FQ_C_1,FQ_F_0,FQ_C_1,FQ_F_1,FQ_C_1,
        FQ_E_0,FQ_A_1,FQ_E_1,FQ_A_1,FQ_E_0,FQ_A_1,FQ_E_1,FQ_A_1,
        FQ_A_1,FQ_E_1,FQ_A_2,FQ_E_1,FQ_A_1,FQ_E_1,FQ_A_2,FQ_E_1,
        FQ_G_0,FQ_D_1,FQ_G_1,FQ_D_1,FQ_G_0,FQ_D_1,FQ_G_1,FQ_D_1,
        FQ_F_0,FQ_C_1,FQ_F_1,FQ_C_1,FQ_F_0,FQ_C_1,FQ_F_1,FQ_C_1,
        FQ_E_0,FQ_G_0,FQ_A_1,FQ_G_0,FQ_E_0,FQ_C_0,FQ_D_0,FQ_Ds0,
        FQ_E_0,FQ_D_0,FQ_C_0
    );
    PROCEDURE C_32C0;
    BEGIN
        SOUND(C_31AA[D_0BBE] SHL 3);
        DELAY($37);
        SOUND(C_31AA[D_0BBE] SHL 1);
        DELAY($37);
        IF(D_0BBE < $8B)
        THEN D_0BBE := D_0BBE + 1
        ELSE D_0BBE := 1;
        NOSOUND;
    END;
    
    PROCEDURE C_3320;
    CONST
        C_3327:ARRAY[1..8] OF STRING[19] = (
            ' ubi soft presente',
            'un jeu realise par',
            '   eric doireau   ',
            '  c. le scoarnec  ',
            '  avec l"aide de  ',
            '      y t g       ',
            '  xavier talgorn  ',
            'christophe bouchon'
        );
        C_33C7:ARRAY[1..3] OF BYTE = (1,2,3);
    VAR
        BP_04:STRING[1];
        BP_05, BP_06:BYTE;
    BEGIN
        D_0BBE := 1;
        FOR BP_05 := 1 TO 8
        DO BEGIN
            FOR BP_06 := 1 TO 3
            DO BEGIN
                C_32C0;
                C_30F7(C_33C7[BP_06]);
                C_2E84($0B, $19);
                C_2FED(C_3327[BP_05]);
                DELAY($28);
            END;
            FOR BP_06 := 1 TO 10
            DO BEGIN
                C_32C0;
                C_314A;
            END;
            FOR BP_06 := 1 TO 3
            DO BEGIN
                C_32C0;
                C_30F7(C_33C7[BP_06]);
                C_2E84($0B, $19);
                C_2FED(C_3327[BP_05]);
                DELAY($28);
            END;
            C_32C0;
            C_314A;
        END;
        C_32C0;
        DELAY($2D);
        C_30D0(0);
        TEXTCOLOR(0);
        TEXTBACKGROUND(0);
        C_2E84($0B, $19);
        C_2F4C;
        WHILE NOT KEYPRESSED
        DO BEGIN
            C_32C0;
            C_314A;
            C_32C0;
            DELAY($37);
        END;
        READ(KBD, BP_04);
    END;
    
    CONST C_352A:STRING[30] = 'jouez-vous sur un amstrad pc ?';
    
    PROCEDURE C_3549;
    BEGIN
        C_30C0(0);
        C_30D0(0);
        REPEAT
            ASSIGN(D_0B72, 'IM1.SCR');
            RESET(D_0B72);
        UNTIL IORESULT = 0;
        C_311E;
        BLOCKREAD(D_0B72, C_2831, 128);
        CLOSE(D_0B72);
        C_30D0(0);
        C_30F7(3);
        C_3320;
    END;
    
    BEGIN
        IF(NOT C_2835)
        THEN BEGIN
        END
        ELSE BEGIN
            GRAPHCOLORMODE;
            D_02B0 := TRUE;
            D_028B := 1;
            PALETTE(D_028B);
            C_2E63;
            D_028A := 0;
            GRAPHBACKGROUND(D_028A);
            {-------------------}
            {-- check mouse ? --}
            {-------------------}
            D_0266.AX := 0;
            INTR($33, D_0266);
            D_02AF := (D_0266.AX = $FFFF);
            {-----}
            {-- --}
            {-----}
            C_30D0(D_0286);
            C_30F7(D_0288);
            C_3549;    {opening sequence}
            D_0B6F := 0;
            
            {----------------------}
            {-- chain to MA1.CHN --}
            {----------------------}
            REPEAT
                ASSIGN(D_0B72, 'MA1.CHN');
                CHAIN(D_0B72);
            UNTIL(IORESULT = 0);
        END;
    END.

    Commentaire

    • karamoon
      Barbarian


      • janvier 2006
      • 344

      #17
      Ne t'en fais je comprends parfaitement.

      En fait c'est de la curiosité d'informaticien, je n'ai jamais réussi à trop avancer sur ce jeux et il y a pleins de choses que je ne comprenais pas et je ne savais pas si c'était un bug ou pas. Je voulais donc voir comment il fonctionnait, et à la limite je pensais le corriger (mais là je rêve )

      En résumé curiosité et amusement et pas de projet en particuliers (d'ailleurs ton blog sur MGT est très intéressant).
      Dernière modification par karamoon, 19 janvier 2011, 18h44.

      Commentaire

      Chargement...