MSX Village forum

La Place des Développeurs Asmsx par un noob, aparté: Un scrolling paralaxe en screen2 réutilisation du timer ...

MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 26/10/2014 à 23h23
Je me suis amusé à créer une petite démo sur la base du « timer » de metalion.
Un scrolling parallaxe
C’est du vite fait graphiquement, mais ça permet de voir une application concrète du système.
Pour les graphismes, j’ai bien galéré pour trouver un convertisseur BMP vers données screen2 asm, j’ai utilisé MSX Tile Devtool, mais j’ai eu des bugs.
Pour la map, j’ai l’impression qu’il n’existe rien de concret pour MSX. J’ai utilisé Tile Studio, mais j’ai été obligé de mettre les tiles dans l’ordre sur la map pour qu’ils prennent le bon N° d’ordre ce qui le rend inutilisable pour des maps plus complexes.
Si quelqu’un a des infos sur ces logiciels ou connait des applications plus adaptées, je suis preneur.

En attendant le programme :
Code ASM :
;------------------------------------------------
;
;                  TUTO  -  ASM
;
;------------------------------------------------
;    Essai de programmation d'un jeu en ASM
;------------------------------------------------
;  MSXosaure 2014...
;------------------------------------------------
;
;------------------------------------------------
;                 Initialisation
;------------------------------------------------
       .bios
       .page   2
       .rom
       .start  DEBUT
;
;------------------------------------------------
; Constantes VRAM
;------------------------------------------------
       CHRTBL  equ     0000h
       NAMTBL  equ     1800h
       CLRTBL  equ     2000h
       SPRTBL  equ     3800h
       SPRATR  equ     1b00h
;------------------------------------------------
DEBUT:
; sélection screen
       call    DISSCR
; réglage COLOR 11,1,1
        ld      hl,0f3e9h
        ld      [hl],15
        inc     hl
        ld      [hl],12
        inc     hl
        ld      [hl],1
; SCREEN 2
        call    INIGRP
; SCREEN ,2
        ld      bc,06201h
        call    WRTVDP
; Mise à zéro de la VRAM
ld hl,0000h
ld bc,4000h
xor a
call FILVRM
; Definition des formes patterns
  ldde,0
  callGST_BANK
  ldde,256*8
  callGST_BANK  
  ldde,512*8
  callGST_BANK 
; Definition des formes sprites
        ld      hl,SPR_PATRON
        ld      de,SPRTBL; + 32
        ld      bc,20*32
        call    LDIRVM
; initialisation des attributs sprites
        ld      hl,ATT_SPRITES; on prend les paramètres initiaux
        ld      de,VAR_SPRITES; à envoyer vers les variables des sprites
        ld      bc,2*4; nombre de sprites * nb d'attributs (ça va évoluer)
       ldir; on lance la "copie"
 
; Sauvegarde du hook original H.TIMI 
        ld    hl,$fd9f; ou HTIMI pour les intimes 
        ld    de,REFRESH_OLD 
        ld    bc,5 
        ldir 
; Mise en place de la dérivation de l'interruption REFRESH 
        di 
        ld    hl,REFRESH
        ld    [$fd9f+1],hl; ou HTIMI+1 pour les intimes on y dépose l'adresse du saut
        ld    a,0C3h        ; opcode "JP" 
        ld    [$fd9f],a; ou HTIMI pour les intimes on y dépose le "jump"
        ei 
;
xor a
ld[VAR_ANI_H],a
callGST_CARTE
;-----------------------------------------------!
;!
;!
;!
;   BOUCLE PRINCIPALE!
;!
;!
;!
LOOP:
    call    WAIT_REFRESH 
call GST_DEP_Heros
call GST_SPRITES
callGST_DEFILE_1; Scrolling premier plan plus rapide
    ld    a,[VAR_TIMER] ; Chargement du timer
    and    1 ; toutes les 2 frames
callz,GST_DEFILE_2  ; Scrolling second plan
ld    a,[VAR_TIMER] ; Chargement du timer
    and    3 ; toutes les 4 frames
callz,GST_DEFILE_3  ; scrolling troisième plan 
jpLOOP
;-----------------------------------------------!
;
;
;
;- - - SOUS PROGRAMME BOUCLE- - -
;
;----------------------------------------------------------
GST_DEFILE_1:;---- Gestion Scrolling premier plan -----
;----------------------------------------------------------
ldhl,CHRTBL+(512*8)+8+16;chargement caractères eau et quai
ld b,16; longueur de ces caractères
callSCROLL; Vers la mise en place du scrolling
lda,-1; conséquence = recul...
jpX_MOVE; du héros!
;
;----------------------------------------------------------
GST_DEFILE_2:;---- Gestion Scrolling second plan -----
;----------------------------------------------------------
ldhl,CHRTBL+(512*8)+8;chargement caractères mur
ld b,16; longueur de ces caractères
jpSCROLL; Vers la mise en place du scrolling
;
;----------------------------------------------------------
GST_DEFILE_3:;---- Gestion Scrolling troisième plan -----
;----------------------------------------------------------
ldhl,CHRTBL+(512*8)+8+32;chargement caractères verdure
ld b,24; longueur de ces caractères
JPSCROLL; Vers la mise en place du scrolling
;
;----------------------------------------------------------
SCROLL:
;----------------------------------------------------------
callRDVRM; ligne de caractère dans a
rlca; rotation vers la gauche
callWRTVRM; remise de la ligne dans la VRAM
inc hl; au suivant!
DJNZSCROLL; on boucle "b" fois 
ret
;
;----------------------------------------------------------
GST_DEP_Heros:;---- Gestion mouvement -----
;----------------------------------------------------------
;
    xor     a; A=0 (test clavier) 
    call    GTSTCK; A= direction flèches clavier 
    cp      0; Si A=0
    jr     nz,@@GST_MOVE; si non (a<>0) saut à la boucle  
    inc     a; si oui A=A+1 (A=1)
    call    GTSTCK; A= direction manette 1 
    cp      0; Si A=0
jr     nz,@@GST_MOVE; si non (a<>0) saut à la boucle
ret
;  
;Gestion mouvement
@@GST_MOVE:
    push  af; sauve a (valeur joystick)
; Orientation sprite
dec a; on décale de -1 pour partir de 0
ldhl,VAL_ORI_H; HL = adr. orientation heros
ldb,0; mise dans BC de a
ldc,a; "
addhl,bc; HL = On met HL à l'adresse correspondant à adresse d'orientation voulue.
lda,[hl]; on met la valeur dans a
; Animation sprite 
    ld    b,a            ; plus rapide que push af et permet de préparer l'addition 
    ld    a,[VAR_TIMER] ; Chargement du timer
    and    7 ; toutes les 8 frames
    ld    a,[VAR_ANI_H]    ; charger a ne modifie pas les flags (pour le 'jp nz') et permet d'anticiper l'opération 
    jp    nz,@@suite ; saut à "pas de modif" si NON
xor 8; inversion (0 ou 8)
ld[VAR_ANI_H],a; sauvegarde de la variable
@@suite:
    add    a,b ;l'ajouter à...l'orientation du héros sauvegardée
    ld     [VAR_SPRITES+(0*4)+2],a ; N° 1er sprite heros (plan0)
    add    4            ; plus rapide que 4x 'inc a' 
    ld     [VAR_SPRITES+(1*4)+2],a ; N° 2nd sprite heros(plan1)
 
; Déplacement horizontaux
 pop af
;    push  af; sauve A (valeur joystick)
 
ldhl,VAL_DEP_X; HL = adr. déplacement X
ldb,0; mise dans BC de A
ldc,a; "
addhl,bc; HL = On met HL à l'adresse correspondant à adresse de déplacement en X + position manette.
lda,[hl]; a = val. déplacement X
X_MOVE:
ldb,a; B = val. déplacement X
lda,[VAR_SPRITES+1] ; a=X avant déplacement
addb; a=a+val. déplacement X
cp 6; si X=X mini -2 (< à X mini)
jr nz,@@X_MAX; si non saut à X_MAX
lda,8; si oui X=X mini
jp@@X_MAJ; et saut à MAJ de X
@@X_MAX:
cp 234; si X=X maxi +2 (> à X maxi)
jr nz,@@X_MAJ; si non saut à MAJ de X
lda,232; si oui X=X maxi
@@X_MAJ:
ld [VAR_SPRITES+(0*4)+1],a; X 1er sprite heros (plan0)
ld [VAR_SPRITES+(1*4)+1],a  ; X 2nd sprite heros(plan1)
ret; Retour à la boucle principale
;
;----------------------------------------------------------- 
; Attente REFRESH 
;----------------------------------------------------------- 
WAIT_REFRESH: 
        ld      hl,VAR_TIMER 
        ld      a,[VAR_TIMER] 
@@loop: cp      [hl] 
        jr      z,@@loop 
        ret 
;
;------------------------------------------------------
;
;- - - SOUS PROGRAMME- - -
;
;------------------------------------------------------
;
;------------------------------------------------------
GST_BANK:; Definition des positions des patterns
;------------------------------------------------------
;
; Definition des formes patterns
        pushde
ld      hl,CHRTBL+8
addhl,de
        ld      de,TIL_PATRON
exde,hl
        ld      bc,22*8
        call    LDIRVM
 
; Definition des couleurs patterns
        popde
ld      hl,CLRTBL+8
addhl,de
        ld      de,TIL_COULEUR
exde,hl
        ld      bc,22*8
        call    LDIRVM
ret
 
;------------------------------------------------------
GST_CARTE:; Definition des positions des patterns
;------------------------------------------------------
;
        ld      hl,TIL_CARTE
        ld      de,NAMTBL
        ld      bc,32*24
        call    LDIRVM
ret
;
;------------------------------------------------------
GST_SPRITES:;- envoi variables vers sprites 
;------------------------------------------------------
;
        ld      hl,VAR_SPRITES; on prend les variables des sprites
        ld      de,SPRATR; à envoyer vers les attributs de sprites en VRAM
        ld      bc,2*4; nombre de sprites * nb d'attributs (ça va évoluer)
        call    LDIRVM; c'est parti!
ret
;----------------------------------------------------------- 
; Interruption sur REFRESH 
;----------------------------------------------------------- 
REFRESH: 
; Incrémentation du compteur REFRESH 
        ld       a,[VAR_TIMER] 
        inc      a 
        cp       128
        jr       nz,CYCLE 
        xor      a 
CYCLE:  ld       [VAR_TIMER],a 
; Exécution du hook original HTIMI et fin de gestion des interruptions 
        jp       REFRESH_OLD
;
;----------------------------------------------------------
; Données
;----------------------------------------------------------
;
; Patron des sprites
SPR_PATRON:
.INCLUDE"data_sprites.asm"
;
; Attribut sprites 
;
; X, Y, N°, Couleur
ATT_SPRITES:
db152,152,16,1
db152,152,20,11
; Test déplacement
VAL_DEP_X:
;------ 0,1,2,3,4,5,6, 7,8
db  0,0,2,2,2,0,-2,-2,-2
VAL_DEP_Y:
;------ 0, 1,2,3,4,5,6,7,8
db  0,-2,0,0,0,2,0,0,0
; orientation du heros
VAL_ORI_H:
;------ 1, 2, 3, 4, 5, 6, 7, 8
db  0,16,16,16,32,48,48,48
; Patrons des patterns
TIL_PATRON:
db 0FFh,00Fh,0C3h,0F0h,0FFh,010h,010h,010h
db 0FFh,001h,001h,001h,0FFh,010h,010h,010h
db 0FFh,080h,080h,07Fh,000h,044h,0EDh,0FFh
db 0FFh,0F7h,0FFh,0FFh,074h,024h,0DBh,07Fh
db 0FFh,0FFh,0FFh,0FFh,0FFh,010h,0B8h,080h
db 0FFh,0FFh,001h,000h,000h,010h,0B8h,080h
db 000h,000h,08Ch,0C0h,000h,006h,00Ch,0C0h
db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
db 080h,0C0h,0E0h,0F0h,0F8h,0FCh,0FEh,0FFh
db 001h,003h,007h,00Fh,01Fh,03Fh,07Fh,0FFh
db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
db 000h,000h,000h,001h,007h,01Fh,0C0h,000h
db 0FFh,0FFh,078h,003h,000h,000h,000h,000h
db 0FFh,0FFh,0FFh,0FFh,00Fh,003h,000h,000h
db 000h,000h,000h,000h,000h,0F0h,007h,001h
db 000h,000h,000h,0B0h,0FFh,0FFh,0FFh,0FFh
db 000h,000h,000h,000h,083h,0FFh,0FFh,0FFh
db 000h,000h,000h,000h,00Fh,07Fh,0FFh,0FFh
db 000h,000h,001h,00Fh,0FFh,0FFh,0FFh,0FFh
db 080h,0C0h,0C0h,0E0h,0F0h,0F8h,0FCh,0FFh
db 001h,003h,007h,00Fh,01Fh,03Fh,07Fh,0FFh
db 000h,000h,000h,000h,000h,000h,000h,000h
db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
; color data
TIL_COULEUR:
db 0E1h,096h,096h,096h,0EAh,0E6h,0E6h,0E6h
db 0E6h,0E6h,0E6h,0E6h,0E6h,0E6h,0E6h,0E6h
db 0E6h,0EFh,0EFh,0E1h,0E1h,0E1h,0E1h,0E1h
db 0E1h,0E1h,0E1h,0E1h,0FEh,05Fh,05Fh,05Fh
db 0E1h,0E1h,0E1h,0E1h,0E1h,03Eh,03Eh,023h
db 071h,071h,037h,037h,037h,027h,027h,02Ch
db 023h,023h,023h,023h,023h,023h,023h,023h
db 051h,051h,051h,051h,051h,051h,051h,051h
db 0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h
db 0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h
db 0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h
db 0E7h,0E7h,0E7h,0E7h,0F7h,0F7h,0EFh,0EFh
db 071h,071h,0F7h,0EFh,0EFh,0EFh,0EFh,0EFh
db 071h,071h,071h,071h,07Fh,0EFh,0EFh,0EFh
db 0E7h,0E7h,0E7h,0E7h,0F7h,0F7h,07Fh,0EFh
db 0EFh,0EFh,0EFh,0EFh,0EFh,0EFh,0EFh,0EFh
db 0EFh,0EFh,0EFh,0EFh,0EFh,0EFh,0EFh,0EFh
db 0EFh,0EFh,0EFh,0EFh,0EFh,0EFh,0EFh,0EFh
db 0EFh,0EFh,0EFh,0EFh,0EFh,0EFh,0EFh,0EFh
db 0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h
db 0E7h,0F7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h,0F7h
db 077h,077h,077h,077h,077h,077h,077h,077h
db 0F1h,0F1h,0F1h,0F1h,0F1h,0F1h,0F1h,0F1h
 
 
;
TIL_CARTE:
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 12, 13, 14, 15
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 21, 16, 17, 18, 19
    db  20, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 10, 11, 11, 11, 11, 11
    db  11,  9, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 10, 11, 11, 11, 11, 11, 11
    db  11, 11,  9, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 10, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11,  9, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 22, 10, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11,  9, 22, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 22, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11, 11,  9, 22, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 22, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11, 11, 11,  9, 22, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 22, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11, 11, 11, 11,  9, 22, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 22, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11, 11, 11, 11, 11,  9, 22, 22, 22, 22, 22
    db  22, 22, 22, 22, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11, 11, 11, 11, 11, 11,  9, 22, 22, 22, 22
    db  22, 22, 22, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  9, 22, 22, 22
    db  22, 22, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  9, 22, 22
    db  22, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  9, 22
    db  10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11
    db  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,  9
    db   5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5
    db   5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5
    db   7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7
    db   7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7
    db   1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1
    db   1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1
    db   2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2
    db   2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2
    db   3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3
    db   3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3
    db   4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4
    db   4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4
    db   8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8
    db   8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8 
;
;----------------------------------------------------------
; VARIABLES
;----------------------------------------------------------
        .page   3
;
; variables sprites
VAR_SPRITES:
    ds  2*4
; variable pour la tempo
VAR_TIMER:
ds1
;hook original H.TIMI
REFRESH_OLD:
ds5
; variable animation heros
VAR_ANI_H:
ds1


La petite vidéo :


Scrolling parallaxe Screen2 (MSXosaure-2014) MSX par MSXosaure



Enfin les fichiers:
scroll.zip


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Maggoo Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 25/06/2013 à 17h49

Messages: 192

Le 27/10/2014 à 02h19
Tres sympa la demo !

Pour la conversion BMP en Screen 2, je te recommande BMP2MSX: http://www.msx.org/news/development/en/bmp2msx-v111008-english

Pour editer la map tu peux essayer Magellan. C'est sur un forum Ti99, mais pas mal de developpeurs MSX l'utilisent:

http://atariage.com/forums/topic/161356-magellan/
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 27/10/2014 à 05h50
C'est super fluide et le Sprite semble très réactif :top


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 27/10/2014 à 08h24
Merci à vous deux,

Je viens de retrouver polka, je vais voir ce que ça donne


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 27/10/2014 à 08h44
MSXosaure :
Pour la map, j’ai l’impression qu’il n’existe rien de concret pour MSX. J’ai utilisé Tile Studio, mais j’ai été obligé de mettre les tiles dans l’ordre sur la map pour qu’ils prennent le bon N° d’ordre ce qui le rend inutilisable pour des maps plus complexes


J'ai pas encore eu le temps de regarder ta démo, ce sera pour tout à l'heure ...



Mais je ne comprends pas ton problème avec TileStudio ... Pour moi c'est un super outil qui justement permet la construction de maps dynamiques à partir d'un charset. Le seul problème est qu'il n'est pas vraiment fait pour gérer des tiles de 8x8, ce qui fait qu'elles sont minuscules.



La procédure :

1. Tu crées tes tiles, en prenant bien soin de les mettre dans le même ordre que dans ton jeu (et en tenant compte que la tile '0' n'existe pas dans TileStudio)

2. Tu crées tes maps.

3. Tu les sauvegardes par "Export Map" avec l'option "8-bits, 1-based"



Tu obtiens alors un fichier binaire qui contient ta map et directement utilisable par ton programme en faisant un ".include".



EDIT : Je viens de voir ta démo. Très joli !! :top Edité par Metalion Le 27/10/2014 à 08h45


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 27/10/2014 à 09h20
Impressionnant :| et avec si peu de code !
Ca donne vraiment envie de s'y mettre :moue

Edit :
Il y aurais pas une erreur dans les commentaires au niveau des frames :hum Edité par Fabf Le 27/10/2014 à 09h26
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 27/10/2014 à 11h26
Metalion :
MSXosaure :
Pour la map, j’ai l’impression qu’il n’existe rien de concret pour MSX. J’ai utilisé Tile Studio, mais j’ai été obligé de mettre les tiles dans l’ordre sur la map pour qu’ils prennent le bon N° d’ordre ce qui le rend inutilisable pour des maps plus complexes


J'ai pas encore eu le temps de regarder ta démo, ce sera pour tout à l'heure ...



Mais je ne comprends pas ton problème avec TileStudio ... Pour moi c'est un super outil qui justement permet la construction de maps dynamiques à partir d'un charset. Le seul problème est qu'il n'est pas vraiment fait pour gérer des tiles de 8x8, ce qui fait qu'elles sont minuscules.



La procédure :

1. Tu crées tes tiles, en prenant bien soin de les mettre dans le même ordre que dans ton jeu (et en tenant compte que la tile '0' n'existe pas dans TileStudio)

2. Tu crées tes maps.

3. Tu les sauvegardes par "Export Map" avec l'option "8-bits, 1-based"



Tu obtiens alors un fichier binaire qui contient ta map et directement utilisable par ton programme en faisant un ".include".



EDIT : Je viens de voir ta démo. Très joli !! :top




Merci, oui pour Tile studio je pense que c'est un problème de config.

Pour MSX Tile Devtool, je vais d'abord passer par BMPtoMSX pour créer un fichier SC2 (Devtool les prend en charge) et créer mon fichier ensuite.



Fabf :
Impressionnant :| et avec si peu de code !

Ca donne vraiment envie de s'y mettre :moue



Edit :

Il y aurais pas une erreur dans les commentaires au niveau des frames :hum




Merci, c'est corrigé!

Ah le copier/coller :oups


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 27/10/2014 à 11h50
Maggoo :
Pour editer la map tu peux essayer Magellan. C'est sur un forum Ti99, mais pas mal de developpeurs MSX l'utilisent


Magellan est très intéressant, et très développé, beaucoup plus que les outils similaires sur MSX.

Mais sauf erreur de ma part, on ne peut pas le télécharger sans être membre du forum !



MSXosaure :
Pour MSX Tile Devtool, je vais d'abord passer par BMPtoMSX pour créer un fichier SC2 (Devtool les prend en charge) et créer mon fichier ensuite


Je ne connaissais pas cet outil récent ... Il a l'air sympa. Edité par Metalion Le 27/10/2014 à 11h50


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 27/10/2014 à 23h10
J'ai fait comme tu m'as dit Metalion, mais asmsx plante systématiquement à l'inclusion du fichier binaire :moue


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
RibbSayan Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 19/08/2010 à 22h47

Messages: 154

Le 27/10/2014 à 23h26
Dans l'archive de "Super Mafia Bros 3", il y a un éditeur de map sympa en dotNET. msxGLEditor.
Ca génère des fichiers *.CHR (table des patterns) et *.CLR (table des couleurs)

Et pour l'intégrer dans asMSX, ces deux lignes suffisent
.incbin "Data/LEVEL01.CHR" SKIP 7 SIZE 2048
.incbin "Data/LEVEL01.CLR" SKIP 7 SIZE 2048

   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 28/10/2014 à 07h50
c'est mignon tout plein...
tu vas nous en faire un jeu j'espère ?


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 28/10/2014 à 08h06
MSXosaure :
J'ai fait comme tu m'as dit Metalion, mais asmsx plante systématiquement à l'inclusion du fichier binaire :moue


Je me suis trompé :(

C'est pas ".include" que tu dois utiliser mais ".incbin" :fou


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 28/10/2014 à 08h16
Metalion :
MSXosaure :
J'ai fait comme tu m'as dit Metalion, mais asmsx plante systématiquement à l'inclusion du fichier binaire :moue


Je me suis trompé :(

C'est pas ".include" que tu dois utiliser mais ".incbin" :fou


J'ai compris quand j'ai vu le post de RibbSayan ^^



Il y a aussi le binDB.exe fourni avec asmsx qui convertit un fichier binaire en fichier asm... J'ai pas pris le temps de lire la notice hier soir...(à quoi ça sert que Granced se décarcasse :oups )



Du coup ça fonctionne bien, mais je regrette de ne pas pouvoir couvrir toute une zone avec une tuile (ou groupe de tuiles en une fois :moue )



@ericb59 , j'aimerai bien, mais je ne suis pour l'instant qu'un petit padawan^^


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 28/10/2014 à 08h34
MSXosaure :
Du coup ça fonctionne bien, mais je regrette de ne pas pouvoir couvrir toute une zone avec une tuile (ou groupe de tuiles en une fois :moue )


Je ne comprends pas très bien ce que tu veux dire.

Que tu ne peux pas peindre une map avec une tuile dans TileStudio, c'est ça ?


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 28/10/2014 à 08h44
Metalion :
MSXosaure :
Du coup ça fonctionne bien, mais je regrette de ne pas pouvoir couvrir toute une zone avec une tuile (ou groupe de tuiles en une fois :moue )


Je ne comprends pas très bien ce que tu veux dire.

Que tu ne peux pas peindre une map avec une tuile dans TileStudio, c'est ça ?


En gros, je sélectionne une tuile (ou un groupe) je sélectionne un "point" dans ma map et un autre plus loin et cette zone se remplit de cette tuile...



Autre problème (par un noob, c'est dans le titre :oups ) mes rappels de sauvegarde de map ne marchent pas, rien ne se charge :hum


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie