Page 7 sur 12

Re: Développement Shoot them up

Publié : dim. 03 janv. 2016 17:19
par touko
Oui tu peux utiliser les tableau car huc ne gère pas les structures, mais attention les tableaux sous huc sont lents . :cry:

Re: Développement Shoot them up

Publié : mar. 05 janv. 2016 11:44
par Hero_Tonma
Je me suis pas occupé des tableaux dynamique mais du background avec scroll pour commencer. J'ai "forcement" un petit soucis 8)

J'arrive à bien afficher mon background avec les tiles mais j'ai un petit glitch lors du scroll. Je me suis basé sur les docs de Tom (je sais pas son nom) et d'une archive en ligne de Touko. http://forum.necstasy.net/viewtopic.php ... nd#p130236

Comme on peut le voir sur ce screen dans la zone rouge, la première ligne ne scroll pas ??? alors que le reste scroll comme il faut. Je regarderai le scroll parallaxe + tard.
Image

Pour mon code, au début j'ajout le Hsync et Vsync :

Code : Tout sélectionner

; set interrupt vector

	setvec #VSYNC,vsync_proc
	vec_on #VSYNC
	setvec #HSYNC,hsync_proc
	vec_on #HSYNC

	; enable HSYNC interrupt

	vreg  #5
	lda   #$CC
	sta   video_data_l
	sta   vdc_crl
Pour chaque framerate (dans ma boucle princpale) j'ajoute #1 à ma valeur de scroll : addw #1,<scr_offset

Mes 2 functions (Hsync et Vsync) :

Code : Tout sélectionner

; ----
; vsync_proc
; ----
; called every VSYNC
; ----

vsync_proc:
	;vreg  #6		; restart the scanline counter on the first
	st0  #6		; restart the scanline counter on the first, sert pour du parallax
	stw   #$40,video_data	; #40 comme dans la doc de Tom, Scanline 0 starts at $40	
	rts

; ----
; hsync_proc
; ----
; called every HSYNC
; ----

hsync_proc:

	; update the scrolling

	st0   #7		
	stw   <scr_offset,video_data
	
	rts
A part ça le scroll marche, les sprites ainsi que mes tests de collisions. On avance.

P.S. J'aimerai aussi afficher des valeurs à l'écran pour pouvoir tester en temps réel comme un debug.
Genre sur le côté de l'écran : posX: 120, posY: 160 Nbre Enn: 10
Je vais pas utiliser des sprites, il y a un moyen en asm de faire ça ?

Re: Développement Shoot them up

Publié : mar. 05 janv. 2016 16:45
par touko
Si tu utilises le gestionnaire d'interruptions de tom,c'est normal il y a un bug .
il fait démarrer l'interruption à la ligne 0,alors qu'il faut le faire à la ligne 262 ou 261 , car les registres de scroll du VDC sont bufférisés, CAD que les changements que tu fais, s'appliquent à la ligne+1 donc si tu fais scroller ton plan avec une interruption horizontale à la ligne 0, les changements de scroll se feront à la ligne 1,et non à la ligne 0 :wink:

De toute façon ton problème est bien que tu fais démarrer ton interruption hsync à la ligne 0.
P.S. J'aimerai aussi afficher des valeurs à l'écran pour pouvoir tester en temps réel comme un debug.
Genre sur le côté de l'écran : posX: 120, posY: 160 Nbre Enn: 10
Je vais pas utiliser des sprites, il y a un moyen en asm de faire ça ?
Oui il faut utiliser des tiles, mais les valeurs que tu vas afficher seront sensibles au scrolling donc pas forcement pratique .
Je sais pas si mkit dispose des fonctions de gestions de fontes comme huc .

Re: Développement Shoot them up

Publié : mar. 05 janv. 2016 17:26
par Hero_Tonma
Merci encore une fois.
Si les docs sont fausses en plus, je suis pas sorti :D

J'ai réussi avec des valeurs plus élevées. Ca doit dépendre de mon format d'écran virtuel mais c'est bon à savoir. J'ai testé est tout scroll nickel.

Je sais que je peux loader les font en asm comme huc mais effectivement pour l'instant j'arrive uniquement avec des tiles du background. Je vais me faire un gestionnaire de texte en partant de HUC, voir son code asm compilé pour m'en faire une version.

Re: Développement Shoot them up

Publié : mar. 05 janv. 2016 18:11
par touko
J'ai réussi avec des valeurs plus élevées. Ca doit dépendre de mon format d'écran virtuel mais c'est bon à savoir. J'ai testé est tout scroll nickel.
Nan l'écran virtuel est juste là pour dire au VDC quand il doit faire le wrap around avec la tilemap .
C'est bien un soucis d'interruption qui est faite à la ligne 0 donc ne s'applique pas à cette ligne mais à partir de la ligne 1.
Si tu dois scroller tout ton écran en X ou Y ne te sers pas des interruptions horizontales pour ça, changes le scroll dans l'interruption VSYNC, c'est plus simple et surtout plus sur et tu n'auras pas ce genre de souci .
Je sais que je peux loader les font en asm comme huc mais effectivement pour l'instant j'arrive uniquement avec des tiles du background. Je vais me faire un gestionnaire de texte en partant de HUC, voir son code asm compilé pour m'en faire une version.
sous huc tu as des fonctions style load_default_font, set_font_pal,set_font_colors,put_string etc ..

Re: Développement Shoot them up

Publié : mar. 05 janv. 2016 23:55
par Kaminari
Si tu bosses sur Ootake ou autre (ce qui semble être le cas), n'oublie pas d'activer la limite de sprites par lignes dans ton émulateur ou tu risques d'avoir de mauvaises surprises quand tu testeras ton code sur PCE.

Re: Développement Shoot them up

Publié : mer. 06 janv. 2016 10:10
par touko
Je peux te donner mes routines reprises de huc pour afficher du texte si tu veux,mais je n'ai repris que l'essentiel pour moi, CAD, put_number,put_string et put_hex largement suffisantes .

Re: Développement Shoot them up

Publié : mer. 06 janv. 2016 11:10
par Hero_Tonma
Kaminari a écrit :Si tu bosses sur Ootake ou autre (ce qui semble être le cas), n'oublie pas d'activer la limite de sprites par lignes dans ton émulateur ou tu risques d'avoir de mauvaises surprises quand tu testeras ton code sur PCE.
OK, je check ça. J'utilise aussi mednafen pour tester (et debugger). Comme ça j'ai deux check-up.
Touko a écrit :Je peux te donner mes routines reprises de huc pour afficher du texte si tu veux,mais je n'ai repris que l'essentiel pour moi, CAD, put_number,put_string et put_hex largement suffisantes .
Je veux bien ça serait sympa, comme ça je pourrais voir direct le code asm.

Re: Développement Shoot them up

Publié : mer. 06 janv. 2016 12:04
par touko
Ok tu peux le récup ici : ftp://193.253.190.115/lib%20fontes.zip

Donc tu copies le rep font et le fichier font.asm dans le rep de ton projet .

il faut ensuite dans ton fichier main inclure le font.asm et faire un
jsr Init_Font ; // INIT DES FONTES SYSTEME, A SUPPRIMER SI NON UTILISEES

J'ai vite adapté ça à mkit donc je sais pas si tout va marcher, mais si il y a des adaptations à faire elles devraient être minimes, le seul souci c'est que j'appelle les fonctions comme sous huc, pas en asm ..

Re: Développement Shoot them up

Publié : mer. 06 janv. 2016 14:21
par Hero_Tonma
Tant que j'y pense, merci pour le hsync/vsync. Je suis passé en vsync.
Le Hsync servira surtout si on fait du parallax pour connaître la ligne où l'on se trouve.

J'ai ajouté tes fonctions mais ça donne pas mal de messages d'erreurs. J'ai rajouté des macros manquantes mais je dois vraiment utiliser des includes différents des tiens. :mrgreen:
Alors je vais lire tes fonctions au calme ce soir pour l'intégrer étape par étape.

Re: Développement Shoot them up

Publié : mer. 06 janv. 2016 15:12
par touko
De rien :wink:
Le Hsync servira surtout si on fait du parallax pour connaître la ligne où l'on se trouve.
Oui c'est exactement pour ça ..
'ai ajouté tes fonctions mais ça donne pas mal de messages d'erreurs. J'ai rajouté des macros manquantes mais je dois vraiment utiliser des includes différents des tiens. :mrgreen:
Oui c'est un peu normal, elles sont adapté à mon kit, qui est dérivé de huc, donc pas compatible telles quelles, mais c'est plus parce que j'ai gardé des convention de huc, pour l'affectation auto des données dans les banks .
Mais bon elles ont étés quand même grandement simplifiées et allégées, mais si tu n'arrives pas à les intégrer dis moi le, j'essayerai de mon côté .

Re: Développement Shoot them up

Publié : lun. 11 janv. 2016 10:09
par Hero_Tonma
Plutôt que de coller "bêtement" tes routines et debbuger jusqu'à trouver comment les ajouter à mon programme. Je les ai lu calmement et j'en ai fait ma version. Pour l'instant, j'ai simplifié au max pour mes besoins. J'ajouterai au fur et à mesure des fonctionnalités. :mrgreen:

Merci pour tes sources.

Re: Développement Shoot them up

Publié : lun. 11 janv. 2016 15:10
par Hero_Tonma
Nouvelle question. J'ai un tableau pour mon background qui fait 32*28 pour afficher un écran complet de 256x224 pixels.

J'arrive à écrire sur tout l'écran. J'ai pas de soucis pour boucler sauf sur un point. Mon tableau tourne en rond tous les 255 tiles. Donc c'est le registre Y qui boucle (normal) mais comment passer outre. j'ai essayé avec des variables mais ça m'indique une erreur à chaque fois. Je devrais pouvoir ajouter une valeur au registre Y pour aller plus loin mais je sais pas comment faire. Si j'écris autre chose que le registre Y pour "LDA [numArray], Y" j'ai le message "Incorrect addressing mode!" :?

Mon code pour lire le tableau simplifié avec les lignes utiles pour comprendre.

Code : Tout sélectionner

        stw   #.scrtab, numArray	; address of the character table
	
	vreg    #$02 

	CLY
	CLX
	
.ld1
	LDA		[numArray], Y

    STA 	$0002
    st2     #$01	
	INY
	... je boucle sur la longueur de mon tableau, pour chaque ligne je replace le registre X pour positionner les tiles ...	
	RTS


Partie de mon tableau :

Code : Tout sélectionner

.scrtab:
	.dw   $0502,$0102,$0201,$0101,$0101,$0101,$0101,$0501	; $XXYY = y=col1 x=col2
	.dw   $0101,$0101,$0101,$0101,$0101,$0101,$0101,$0101	;1èere ligne / 32 tiles = 256pix
	.dw   $0104,$0105,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0100,$0101,$0102,$0103,$0100,$0101,$0102,$0103	
	.dw   $0106,$0107,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0106,$0107,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0104,$0105,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0100,$0101,$0102,$0103,$0100,$0101,$0102,$0106	
	
	.dw   $0401,$0102,$0201,$0101,$0101,$0101,$0101,$0501	; $XXYY = y=col1 x=col2
	.dw   $0101,$0101,$0101,$0101,$0101,$0101,$0101,$0101	;2ème bloc 1ère ligne / 32 tiles = 256pix
	.dw   $0104,$0105,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0100,$0101,$0102,$0103,$0100,$0101,$0102,$0103	
	.dw   $0106,$0106,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0106,$0107,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0104,$0105,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0100,$0101,$0102,$0103,$0100,$0404,$0404,$0404	
	
	
	
	.dw   $0502,$0102,$0201,$0101,$0101,$0101,$0101,$0501	; $XXYY = y=col1 x=col2
	.dw   $0101,$0101,$0101,$0101,$0101,$0101,$0101,$0101	; 3ème bloc pas lu car Y>255/ 32 tiles = 256pix
	.dw   $0104,$0105,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0100,$0101,$0102,$0103,$0100,$0101,$0102,$0103	
	.dw   $0106,$0107,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0106,$0107,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0104,$0105,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0100,$0101,$0102,$0103,$0100,$0404,$0404,$0404	
	
	.dw   $0401,$0102,$0201,$0101,$0101,$0101,$0101,$0501	; $XXYY = y=col1 x=col2
	.dw   $0101,$0101,$0101,$0101,$0101,$0101,$0101,$0101	; 4ème bloc pas lu / 32 tiles = 256pix
	.dw   $0104,$0105,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0100,$0101,$0102,$0103,$0100,$0101,$0102,$0103	
	.dw   $0106,$0106,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0106,$0107,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0104,$0105,$0102,$0103,$0100,$0101,$0102,$0103
	.dw   $0100,$0101,$0102,$0103,$0100,$0101,$0102,$0100
...
*Edit :
Après je peux aussi passer en mode Super Bourrin Sayan en faisant plusieurs tableaux mais ça va poser maxi problème pour le scrolling et rajouter des tiles en lives.

Re: Développement Shoot them up

Publié : lun. 11 janv. 2016 16:11
par Hero_Tonma
Comme toujours, j'avais pas relu tout ce poste et tu m'avais déjà répondu.

Après quelques tests, je dois rajouter au pointeur directement une valeur :

stw #.scrtab,<_si ; pointeur sur l'adresse du tableau
addw _s1, #$FF ; j'augmente mon pointeur de 255
LDA [_si],Y

Relire le forum tu dois. :mrgreen:

Re: Développement Shoot them up

Publié : lun. 11 janv. 2016 18:35
par MooZ
Ce message est destiné au toi du futur qui voudra optimiser ton code assembleur une fois le premier jet fini.

1. au lieu de faire addw _si, #ff, utilise addw <_si, #ff. _si est une variable dans la page zéro.
2. addw est une macro qui se traduit par

Code : Tout sélectionner

    ; lo
    lda <_si
    clc
    adc #low($ff)
    sta <_si
    ; hi
    lda <_si+1
    adc #high($ff) ; 255>>8 = 0
    sta <_si+1
Sachant que 255>>8 = 0, la seconde partie est superflue. Tu peux joyeusement remplacer tout ça par:

Code : Tout sélectionner

    lda <_si
    clc
    adc #low($ff)
    sta <_si
    bcc .no_inc     ; on incrémente la partie haute si on a une retenue
        inc <_si+1
.no_inc: