Amstrad Plus Index du Forum

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

*****A tribute to Raytracing

 
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation
Sujet précédent :: Sujet suivant  
Auteur Message
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 1 956

MessagePosté le: Mer 10 Déc - 20:07 (2014)    Sujet du message: *****A tribute to Raytracing Répondre en citant

Demoniak  (Paradox/iMPACT) vous présente une routine de Raytracing très originale (Utiliser les touches flechées pour vous déplacer)
--------
Demoniak (Paradox/iMPACT) presents us a Raytracing's routin very original (Use arrays key to move)



 
 
 
 
 
 
-Source comes from CpcRulez-

Code:
        org     #9000
        run $
start:
        DI
        LD      BC,#7F8C
        OUT     (C),C
        LD      H,Laby/256              ; Adresse <HI> de la "map"
        EXX

DrawView:
        LD      A,#00                   ; Angle
        SUB     40                      ; A2 = Angle - 40, on va tracer des lignes verticales de angle-40 à angle+39 => 80 octets en largeur
        LD      (BclDrawView+1),A
        XOR     A
        LD      (DrawX+1),A
BclDrawView:
        LD      HL,TabCos/2
        LD      A,L                     ; A2
        LD      D,A
        ADD     HL,HL
        LD      A,(HL)
        INC     HL
        LD      B,(HL)
        RLA
        RL      B
        RLA
        RL      B
        RLA
        RL      B
        RLA
        RL      B
        LD      C,A
        LD      (stepy+1),BC
        LD      H,TabCos/512
        LD      A,D
        ADD     A,64                    ; A2 + 64 (TabCos[Angle+64]=TabSin[Angle])
        LD      L,A
        ADD     HL,HL
        LD      C,(HL)
        INC     HL
        LD      B,(HL)
        LD      (stepx+1),BC
PosX:
        LD      DE,#0400                ; xx
PosY:
        LD      HL,#1000                ; yy
        XOR     A
LoopLabyView:
        EX      AF,AF'                  ; Sauvegarde dist
        LD      A,H
        AND     #F0
        OR      D
        EXX
        LD      L,A
        LD      A,(HL)                  ; Laby[ ( xx >> 10 ) + ( yy >> 10 ) << 4 ]
        EXX
        AND     A
        JR      NZ,EndLoopLaby
stepy:
        LD      BC,0
        ADD     HL,BC                   ; HL = PosY + stepy
        EX      DE,HL
stepx:
        LD      BC,0
        ADD     HL,BC
        EX      DE,HL                   ; DE = PosX + stepx
        EX      AF,AF'
        INC     A                       ; Dist = Dist + 1
        JR      LoopLabyView
EndLoopLaby:
        LD      C,A                     ; couleur
        LD      H,TabHeight/256
        EX      AF,AF'
        LD      L,A                     ; En fonction de la distance
        LD      B,(HL)                  ; On déduit la hauteur
        LD      A,25
;
; Trace une ligne verticale avec L = x, B = hauteur, C = couleur
;
        SUB     B
        LD      (MinHauteur+1),A        ; Hauteur mini = 25 - hauteur
        ADD     A,B
        ADD     A,B
        LD      (MaxHauteur+1),A        ; Hauteur maxi = 25 + hauteur
DrawX:
        LD      HL,#C000                ; Position x
        LD      DE,#C050                ; Pour ajustement mémoire vidéo
        LD      B,50                    ; hauteur totale
BclY:
        LD      A,B
MaxHauteur:
        CP      0                       ; Hauteur max à tracer
        JR      NC,DrawVide
MinHauteur:
        CP      0                       ; Hauteur min à tracer
        JR      C,DrawVide
        LD      A,C                     ; Octet mode 0 représentant la couleur du mur
        JR      DrawOk
DrawVide:
        XOR     A                       ; Pas de mur
DrawOk:
        LD      (HL),A                  ; Ecriture dans Ligne n
        SET     3,H                     ; Ligne n + 1
        LD      (HL),A                  ; Ecriture
        SET     4,H                     ; Ligne n + 3
        LD      (HL),A                  ; Ecriture
        RES     3,H                     ; Ligne n + 2
        LD      (HL),A                  ; Ecriture
        LD      A,H                     ; Ici H a déja été augmenté de #10 (avec le SET 4)
        ADD     A,#10                   ; Passage à la ligne n+4
        LD      H,A
        JR      NC,Suite
        ADD     HL,DE                   ; Ajustement si débordement
Suite:
        DJNZ    BclY                    ; Nombre de Y terminés ?
        LD      A,(BclDrawView+1)
        INC     A                       ; Incrémeter A2 (angle de traçage)
        LD      (BclDrawView+1),A
        LD      A,(DrawX+1)
        INC     A
        LD      (DrawX+1),A
        CP      80
        JP      C,BclDrawView
        LD      BC,#F40E
        OUT     (C),C
        LD      BC,#F6C0
        OUT     (C),C
        XOR     A
        OUT     (C),A
        LD      BC,#F792
        OUT     (C),C
        LD      A,#40
        LD      HL,MatClavier
ReadClav1:
        LD      B,#F6
        OUT     (C),A
        LD      B,#F4
        INI
        INC     A
        CP      #42                     ; Pas besoin d'aller plus loin pour lire les flèches
        JR      C,ReadClav1
        LD      BC,#F782
        OUT     (C),C

        DEC     HL
        LD      A,(HL)
        RRA                             ; Left
        JR      C,TstRight
        LD      A,(DrawView+1)
        SUB     4                       ; Angle = Angle - 4
        LD      (DrawView+1),A

TstRight:
        DEC     HL
        LD      A,(HL)
        BIT     1,A                     ; Right
        JR      NZ,TstUp
        LD      A,(DrawView+1)
        ADD     A,4                     ; Angle = Angle + 4
        LD      (DrawView+1),A

TstUp:
        LD      A,(HL)
        RRA                             ; Up
        JR      c,TstDown
        LD      DE,#4000                ; Déplacement en avant => +cos[A+64] en x et +cos[A] en y
        JR      Move

TstDown:
        BIT     1,A                     ; Down
        JP   NZ,DrawView

        LD      DE,#C080                ; Déplacement en arrière => +cos[A-64] en x et +cos[A+128] en y
Move:
        LD      H,TabCos/512
        LD      A,(DrawView+1)
        ADD     A,D
        LD      L,A
        SUB     D
        ADD     A,E                     ; D = E + 64 (TabCos[Angle+64]=TabSin[Angle])
        ADD     HL,HL                   ; TabCos est un tableau de mot (16 bits)
        LD      C,(HL)
        INC     HL
        LD      B,(HL)
        LD      HL,(PosX+1)
        ADD     HL,BC
        EX      DE,HL                   ; DE = newPx
        LD      H,TabCos/512
        LD      L,A
        ADD     HL,HL
        LD      A,(HL)
        INC     HL
        LD      B,(HL)
        RLA
        RL      B
        RLA
        RL      B
        RLA      
        RL      B
        RLA
        RL      B
        LD      C,A
        LD      HL,(PosY+1)
        ADD     HL,BC                   ; HL = newPy (PosY + TabCos[ Angle + E ] << 1)
        LD      A,H
        AND     #F0
        OR      D
        EXX
        LD      L,A
        LD      A,(HL)                  ; Lecture valeur laby[ ( newpx >> 10 ) + ( newpy >> 10 ) << 4 ]
        EXX
        AND     A
        JP      NZ,DrawView             ; Si laby[ newpos ] non vide, pas de déplacement possible
        LD      (PosY+1),HL
        EX      DE,HL
        LD      (PosX+1),HL
        JP      DrawView

        org     #9200

;
; "Map" => chaque valeur est un octet en mode 0
;
Laby:
   DB #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #4C
   DB #FC, #10, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #01, #4C
   DB #03, #00, #00, #00, #00, #00, #00, #00, #33, #00, #00, #00, #00, #00, #00, #4C
   DB #FC, #00, #00, #00, #00, #00, #00, #00, #33, #00, #30, #00, #00, #00, #00, #4C
   DB #03, #00, #00, #00, #00, #00, #30, #CF, #CF, #00, #CC, #00, #00, #00, #00, #4C
   DB #FC, #00, #00, #00, #00, #00, #CC, #00, #33, #CC, #30, #CC, #30, #CC, #00, #4C
   DB #03, #00, #00, #00, #00, #00, #30, #00, #00, #00, #CC, #00, #CC, #00, #00, #4C
   DB #03, #00, #00, #00, #00, #00, #30, #00, #00, #00, #CC, #00, #CC, #00, #00, #4C
   DB #FC, #00, #00, #00, #00, #00, #CC, #00, #00, #00, #30, #00, #00, #00, #C3, #4C
   DB #03, #00, #00, #00, #00, #00, #30, #00, #00, #00, #00, #00, #00, #00, #00, #4C
   DB #FC, #00, #00, #00, #00, #00, #F0, #3C, #F0, #00, #00, #00, #00, #00, #00, #4C
   DB #FC, #00, #00, #00, #00, #00, #F0, #3C, #F0, #3C, #00, #00, #00, #00, #00, #4C
   DB #03, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #4C
   DB #FC, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #4C
   DB #03, #10, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #00, #01, #4C
   DB #FC, #03, #FC, #03, #FC, #03, #FC, #03, #FC, #03, #34, #FC, #03, #FC, #C4, #4C

;
; Conversion distance en hauteur de mur (hauteur variant de 25 (hauteur max) à 0)
;
TabHeight
   DB #19, #19, #19, #19, #19, #19, #19, #19, #19, #19, #19, #16, #14, #13, #11, #10
   DB #0F, #0E, #0D, #0D, #0C, #0B, #0B, #0A, #0A, #0A, #09, #09, #08, #08, #08, #08
   DB #07, #07, #07, #07, #06, #06, #06, #06, #06, #06, #05, #05, #05, #05, #05, #05
   DB #05, #05, #05, #04, #04, #04, #04, #04, #04, #04, #04, #04, #04, #04, #04, #03
   DB #03, #03, #03, #03, #03, #03, #03, #03, #03, #03, #03, #03, #03, #03, #03, #03
   DB #03, #03, #03, #03, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02
   DB #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02
   DB #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #02, #01, #01
   DB #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01
   DB #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01
   DB #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01
   DB #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01
   DB #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01
   DB #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01
   DB #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01
   DB #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #01, #00, #00, #00, #00, #00

;
; Tableau de mot de 16 bits => cos(x)*80 (x de 0 à 255 pour un équivalent angle de 0 à 359 degrés)
;
TabCos
        DW      #0050, #004F, #004F, #004F, #004F, #004F, #004F, #004E
        DW      #004E, #004E, #004D, #004D, #004C, #004B, #004B, #004A
        DW      #0049, #0049, #0048, #0047, #0046, #0045, #0044, #0043
        DW      #0042, #0041, #0040, #003F, #003D, #003C, #003B, #0039
        DW      #0038, #0037, #0035, #0034, #0032, #0031, #002F, #002E
        DW      #002C, #002A, #0029, #0027, #0025, #0023, #0022, #0020
        DW      #001E, #001C, #001A, #0019, #0017, #0015, #0013, #0011
        DW      #000F, #000D, #000B, #0009, #0007, #0005, #0003, #0001
        DW      #0000, #FFFF, #FFFD, #FFFB, #FFF9, #FFF7, #FFF5, #FFF3
        DW      #FFF1, #FFEF, #FFED, #FFEB, #FFE9, #FFE7, #FFE6, #FFE4
        DW      #FFE2, #FFE0, #FFDE, #FFDD, #FFDB, #FFD9, #FFD7, #FFD6
        DW      #FFD4, #FFD2, #FFD1, #FFCF, #FFCE, #FFCC, #FFCB, #FFC9
        DW      #FFC8, #FFC7, #FFC5, #FFC4, #FFC3, #FFC1, #FFC0, #FFBF
        DW      #FFBE, #FFBD, #FFBC, #FFBB, #FFBA, #FFB9, #FFB8, #FFB7
        DW      #FFB7, #FFB6, #FFB5, #FFB5, #FFB4, #FFB3, #FFB3, #FFB2
        DW      #FFB2, #FFB2, #FFB1, #FFB1, #FFB1, #FFB1, #FFB1, #FFB1
        DW      #FFB1, #FFB1, #FFB1, #FFB1, #FFB1, #FFB1, #FFB1, #FFB2
        DW      #FFB2, #FFB2, #FFB3, #FFB3, #FFB4, #FFB5, #FFB5, #FFB6
        DW      #FFB7, #FFB7, #FFB8, #FFB9, #FFBA, #FFBB, #FFBC, #FFBD
        DW      #FFBE, #FFBF, #FFC0, #FFC1, #FFC3, #FFC4, #FFC5, #FFC7
        DW      #FFC8, #FFC9, #FFCB, #FFCC, #FFCE, #FFCF, #FFD1, #FFD2
        DW      #FFD4, #FFD6, #FFD7, #FFD9, #FFDB, #FFDD, #FFDE, #FFE0
        DW      #FFE2, #FFE4, #FFE6, #FFE7, #FFE9, #FFEB, #FFED, #FFEF
        DW      #FFF1, #FFF3, #FFF5, #FFF7, #FFF9, #FFFB, #FFFD, #FFFF
        DW      #0000, #0001, #0003, #0005, #0007, #0009, #000B, #000D
        DW      #000F, #0011, #0013, #0015, #0017, #0019, #001A, #001C
        DW      #001E, #0020, #0022, #0023, #0025, #0027, #0029, #002A
        DW      #002C, #002E, #002F, #0031, #0032, #0034, #0035, #0037
        DW      #0038, #0039, #003B, #003C, #003D, #003F, #0040, #0041
        DW      #0042, #0043, #0044, #0045, #0046, #0047, #0048, #0049
        DW      #0049, #004A, #004B, #004B, #004C, #004D, #004D, #004E
        DW      #004E, #004E, #004F, #004F, #004F, #004F, #004F, #004F

MatClavier:
        DS      3











_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Revenir en haut
Publicité






MessagePosté le: Mer 10 Déc - 20:07 (2014)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
BDCIRON
Invité

Hors ligne




MessagePosté le: Mer 10 Déc - 20:30 (2014)    Sujet du message: *****A tribute to Raytracing Répondre en citant




Dernière édition par BDCIRON le Lun 29 Juin - 13:17 (2015); édité 1 fois
Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 1 956

MessagePosté le: Mer 10 Déc - 20:40 (2014)    Sujet du message: *****A tribute to Raytracing Répondre en citant

BDCIRON a écrit:


Par contre AST, tes icones "Nouveau message" sont identiques à "pas de nouveaux messages"... 



C'est mieux la ?
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Revenir en haut
BDCIRON
Invité

Hors ligne




MessagePosté le: Jeu 11 Déc - 00:39 (2014)    Sujet du message: *****A tribute to Raytracing Répondre en citant




Dernière édition par BDCIRON le Lun 29 Juin - 13:18 (2015); édité 1 fois
Revenir en haut
snake_plissken


Hors ligne

Inscrit le: 03 Déc 2014
Messages: 258
Localisation: les pont de cé

MessagePosté le: Jeu 11 Déc - 09:41 (2014)    Sujet du message: *****A tribute to Raytracing Répondre en citant

Je me suis amusé a changer la map,y'a du potentiel,mais hélas on a pas le droit a des textures.

Peu etre les bases d'un doom sur cpc Smile


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 1 956

MessagePosté le: Jeu 11 Déc - 12:40 (2014)    Sujet du message: *****A tribute to Raytracing Répondre en citant

C'est réellement pas mal du tout.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 04:01 (2017)    Sujet du message: *****A tribute to Raytracing

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com