JEU -> Action
© Gargoyle Games (1986)
 
 
 
Tir Na Nog
cpc
 
 
screenshot
screenshot
screenshot
screenshot
screenshot
screenshot
 

screenshot
CTM644 Colour Monitor
screenshot
GT65 Green Monitor
 

NOUS RECHERCHONS :
  • Tir Na Nog (UK) (D7) (1986).dsk
  • Tir Na Nog (UK) (K7) (1986) (Trainer).dsk
  • Mots Clefs

    INFOS

    - CATEGORIES -
    JEU -> Action               
    - NOMBRE DE JOUEURS -
    1 joueur
    - DESCRIPTION -
    Vous incarnez Cuchulainn qui cherche les 4 pièces du sceau de Calum afin de rendre à la race Sidhe son intelligence initiale. Le jeu est composé de plusieurs mini-jeux, tous différents.

    - DIVERS -
    La version originale de Gargoyle Games était vendue exclusivement par correspondance par la revue Amtix! Lorsque Amtix! a cessé de paraître, le jeu était vendu par correspondance par la revue Amstrad Action.

    Pub "Amtix!" numéro 12 Octobre 1986, pages 4 et 5.
    Pub "Amstrad Action" Issue 20, May 1987, page 87.

    Le jeu est en MODE 1 et via l'utilisation des rasters, permet de dépasser les 4 couleurs par défaut.
    screenshot


    - COMMANDES -
    Clavier AZERTY :
    Sélectionner un objet = 0 a 9 (l'étoile devant l'objet signale qu'on l'a sélectionné)
    Prendre = A
    Poser = Z
    Aller à gauche = W
    Aller à droite = X
    Rotation caméra gauche = Q
    Rotation caméra droite = S
    Action = Espace

    - STAFF -
    Edité par : Gargoyle Games
    Distribué en espagne par : Dro Soft

    Auteurs : Greg FOLLIS, Roy CARTER

    - BUGS -
    * La zone An-Lin est dans le noir total ce qui n'est pas le cas avec la version ZX Spectrum (Nous avons un cyan très pale).
    screenshot


    Correction :
    poke &7B1A, le &14 en &06 (&06 = encre 10 CYAN ou &04 = encre 1 BLEU)

    AVANT :
    C3 3E 7B 14 17 0C 0D

    APRES :
    C3 3E 7B 06 17 0C 0D

    screenshot


    Si vous êtes déjà dans la zone An-Lin avec une version non patchée, pas de panique, il suffit de modifier 2 adresses en RAM.
    poke &731F,&06 (&06 = encre 10 CYAN ou &04 = encre 1 BLEU)
    poke &7322,&06 (&06 = encre 10 CYAN ou &04 = encre 1 BLEU)


    * Le message de fin ne s'affiche pas
    Pour finir le jeu, il faut réunir les 4 talismans (Dagda's Cauldron, Lugh's Spear, Nuada's Sword et Stone of Fal) et le marteau (Calum's Hammer) pour reforger le sceau.
    Il faut déposer tous les objets au sol et les inscriptions changent sur l'autel en affichant "OGAM".
    Le dernier objet a déposer et qui doit valider la fin du jeu c'est le "Calum's Hammer" mais le jeu refuse de déclencher la fin.
    screenshot screenshot


    Correction par Isidoro :
    Le problème venait du fait que lorsque le programme arrive en &A3D7, "HL" devrait pointer vers un tableau contenant les données des 5 éléments que nous devons placer sur l'autel (ces 5 éléments seront testés dans la boucle &A3E3), mais il semble que le développeur ait oublié d'attribuer ce pointeur à "HL". Ainsi, à ce stade de l'exécution du programme, "HL" prend la valeur de la fonction &A3D7 elle-même, ce qui est incorrect.
    La solution devrait consister à ajouter les instructions nécessaires pour lire ce pointeur et le charger dans "HL", mais cela implique d’ajouter quelques octets au milieu de la fonction ; je devrais donc déplacer une partie de la fonction vers un autre espace mémoire libre. Mais en lisant le code juste avant &A3D7, je me suis rendu compte que ce code ne faisait que mettre en valeur certaines variables dans le registre indexé "IX" ; je peux donc intervertir l'ordre de (IX + #0E) – (IX + #0f) et (IX + #03) – (IX + #04) sans modifier le comportement de la fonction, et changer l'adresse de départ de l'exécution de la fonction de &A3D7 à &A3CE. De cette manière, le correctif permettant de corriger le bogue peut être réalisé en modifiant quelques octets, sans qu'il soit nécessaire de déplacer la fonction vers une autre adresse mémoire. C'est la raison pour laquelle j'ai choisi cette méthode pour le corriger.

    En &A3B8
    AVANT :
    21 A5 AD DD 75 0E DD 74 0F

    APRES :
    21 CE A3 DD 75 03 DD 74 04

    poke &A3B9, le &A5 en &CE
    poke &A3BA, le &AD en &A3
    poke &A3BD, le &0E en &03
    poke &A3C0, le &0F en &04

    En &A3CE
    AVANT :
    21 D7 A3 DD 75 03 DD 74 04

    APRES :
    21 A5 AD DD 75 0E DD 74 0F

    poke &A3CF, le &D7 en &A5
    poke &A3D0, le &A3 en &AD
    poke &A3D3, le &03 en &0E
    poke &A3D6, le &04 en &0F

    Détail au niveau de la programmation :
    ; 1454
    SPRITES_ALTAR
    dw GFX_ALTAR : DB #84, #05 ; Sprite de l'AUTEL (Hauteur : 4x8 lignes, Largeur : 5 octets)

    ; 51c6
    GFX_ALTAR ;; Graphisme de l’autel en mode 2

    ; ada5
    ; Le premier octet devient 00 lorsque l'on place correctement l'objet
    ; "ogam" : le texte qui s'affiche sur l'autel au fur et à mesure que l'on place les objets
    ITEMS_ALTAR
    68(00) "o" 29 ; NUADAS SWORD
    67(00) "g" 2A ; LUGHS SPEAR
    92(00) "a" 51 ; STONE OF FAL
    65(00) "m" 52 ; DAGDAS CAULDRON
    7F(00) 00 00 ; CALUMS HAMMER

    ; CORRECTION DE BOGUE :
    ; A3B8 : 21 CE A3 DD 75 03 DD 74 04
    ; A3CE : 21 A5 AD DD 75 0E DD 74 0F

    ; a3b8 ; spectrum_l8db6
    ; Cette fonction s'exécute lors du rendu graphique de l'autel, dans la dernière pièce
    ROOM_ALTAR_handler
    ; MODIFICATION
    if BUGFIX
    LD HL, .la3ce ; Au lieu de sauvegarder la3d7, je sauvegarde la3ce, qui commencera par attribuer HL = ITEMS_ALTAR, ce qui permettra à la boucle vérifiant les 5 objets de fonctionner correctement
    LD (IX + #03), L
    LD (IX + #04), H
    else
    LD HL, ITEMS_ALTAR ; ada5
    LD (IX + #0E), L
    LD (IX + #0F), H
    endif

    LD HL, (SPRITE_ALTAR) ; HL = (SPRITE_ALTAR(1154)) = GFX_ALTAR(51c6)
    LD (IX + #10), L
    LD (IX + #11), H

    LD (IX + #12), #05

    if BUGFIX
    .la3ce
    LD HL, ITEMS_ALTAR ; ada5
    LD (IX + #0E), L
    LD (IX + #0F), H
    else
    LD HL, .la3d7
    LD (IX + #03), L
    LD (IX + #04), H
    endif

    .la3d7 ; Cette sous-fonction est appelée avec JP(HL) à chaque trame, c'est pourquoi, en arrivant ici, hl contient la valeur de l'adresse de la sous-fonction elle-même
    ; REMARQUE : En réalité, la CORRECTION consisterait à ajouter ici ces deux lignes :
    ; LD L, (IX + #0E)
    ; LD H, (IX + #0F)
    ; Le CORRECTIF que j'ai appliqué précédemment consiste à réorganiser l'ordre entre l'endroit où s'effectue l'affectation de "items_altar" et cette sous-fonction, afin de pouvoir appliquer le correctif sans ajouter d'octets ni avoir à déplacer cette sous-fonction.
    ; Je peux réorganiser cela car le code au début de la fonction ne fait que des affectations de variables.
    LD A, (la734)
    CP #00
    JR NZ, .la3ed

    ; Vérifie si les 5 objets nécessaires ont bien été placés sur l’autel
    LD B, #05 ; Les 5 objets nécessaires sur l’autel
    LD DE, l0003
    .la3e3
    LD A, (HL) ; ERREUR : cela devrait être HL = ITEMS_ALTAR (ada5), mais à la place, c'est l'adresse mémoire de la sous-fonction la3d7 elle-même
    AND A
    JR NZ, .la3ed
    ADD HL, de
    DJNZ .la3e3
    JP l847c ; Affiche le message de fin de jeu et lance l'animation des couleurs des crânes sur le HUD

    .la3ed
    LD HL, (la727)
    LD E, (IX + #07)
    - LIENS -
    COMPILATION -> Presse Amstrad Action Issue 075 © Amstrad Action (1991)
    COMPILATION -> Officielle Gargoyle Classics © Hewson (1988)


    Critique en anglais : "CPC Game Reviews"
    Database : "Moby Games"
    database : "amstrad.es"
    Version Commodore 64 : "Lemon64"
    Version Spectrum : "Spectrum Computing"

     

    Goto Top

    CPC-POWER/CPCSOFTS, programmation par Kukulcan © 2007-2026 tous droits réservés.
    Reproduction sans autorisation interdite. Tous les titres utilisés appartiennent à leurs propriétaires respectifs.
    Hébergement Web, Mail et serveurs de jeux haute performance