Développement Shoot them up
Modérateurs : SirG, Redfield1, shubibiman, Laucops
- touko
- NECromancer
- Messages : 2297
- Inscription : lun. 31 mars 2008 14:32
Re: Développement Shoot them up
Oui tu peux utiliser les tableau car huc ne gère pas les structures, mais attention les tableaux sous huc sont lents . 
- Hero_Tonma
- Push Run Button!
- Messages : 89
- Inscription : lun. 20 juil. 2015 14:26
Re: Développement Shoot them up
Je me suis pas occupé des tableaux dynamique mais du background avec scroll pour commencer. J'ai "forcement" un petit soucis
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.

Pour mon code, au début j'ajout le Hsync et Vsync :
Pour chaque framerate (dans ma boucle princpale) j'ajoute #1 à ma valeur de scroll : addw #1,<scr_offset
Mes 2 functions (Hsync et Vsync) :
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 ?
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.

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_crlMes 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
rtsP.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 ?
- touko
- NECromancer
- Messages : 2297
- Inscription : lun. 31 mars 2008 14:32
Re: Développement Shoot them up
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
De toute façon ton problème est bien que tu fais démarrer ton interruption hsync à la ligne 0.
Je sais pas si mkit dispose des fonctions de gestions de fontes comme huc .
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
De toute façon ton problème est bien que tu fais démarrer ton interruption hsync à la ligne 0.
Oui il faut utiliser des tiles, mais les valeurs que tu vas afficher seront sensibles au scrolling donc pas forcement pratique .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 ?
Je sais pas si mkit dispose des fonctions de gestions de fontes comme huc .
Dernière modification par touko le mer. 06 janv. 2016 10:06, modifié 1 fois.
- Hero_Tonma
- Push Run Button!
- Messages : 89
- Inscription : lun. 20 juil. 2015 14:26
Re: Développement Shoot them up
Merci encore une fois.
Si les docs sont fausses en plus, je suis pas sorti
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.
Si les docs sont fausses en plus, je suis pas sorti
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.
- touko
- NECromancer
- Messages : 2297
- Inscription : lun. 31 mars 2008 14:32
Re: Développement Shoot them up
Nan l'écran virtuel est juste là pour dire au VDC quand il doit faire le wrap around avec la tilemap .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.
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 .
sous huc tu as des fonctions style load_default_font, set_font_pal,set_font_colors,put_string etc ..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.
Dernière modification par touko le mer. 06 janv. 2016 10:08, modifié 4 fois.
- Kaminari
- Modérateur
- Messages : 7049
- Inscription : ven. 24 sept. 2004 19:36
- Contact :
Re: Développement Shoot them up
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.
- touko
- NECromancer
- Messages : 2297
- Inscription : lun. 31 mars 2008 14:32
Re: Développement Shoot them up
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 .
- Hero_Tonma
- Push Run Button!
- Messages : 89
- Inscription : lun. 20 juil. 2015 14:26
Re: Développement Shoot them up
OK, je check ça. J'utilise aussi mednafen pour tester (et debugger). Comme ça j'ai deux check-up.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.
Je veux bien ça serait sympa, comme ça je pourrais voir direct le code asm.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 .
- touko
- NECromancer
- Messages : 2297
- Inscription : lun. 31 mars 2008 14:32
Re: Développement Shoot them up
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 ..
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 ..
- Hero_Tonma
- Push Run Button!
- Messages : 89
- Inscription : lun. 20 juil. 2015 14:26
Re: Développement Shoot them up
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.
Alors je vais lire tes fonctions au calme ce soir pour l'intégrer étape par étape.
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.
Alors je vais lire tes fonctions au calme ce soir pour l'intégrer étape par étape.
- touko
- NECromancer
- Messages : 2297
- Inscription : lun. 31 mars 2008 14:32
Re: Développement Shoot them up
De rien
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é .
Oui c'est exactement pour ça ..Le Hsync servira surtout si on fait du parallax pour connaître la ligne où l'on se trouve.
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 .'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.![]()
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é .
- Hero_Tonma
- Push Run Button!
- Messages : 89
- Inscription : lun. 20 juil. 2015 14:26
Re: Développement Shoot them up
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.
Merci pour tes sources.
Merci pour tes sources.
- Hero_Tonma
- Push Run Button!
- Messages : 89
- Inscription : lun. 20 juil. 2015 14:26
Re: Développement Shoot them up
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.
Partie de mon tableau :
*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.
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
...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.
- Hero_Tonma
- Push Run Button!
- Messages : 89
- Inscription : lun. 20 juil. 2015 14:26
Re: Développement Shoot them up
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.
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.
- MooZ
- Administrateur
- Messages : 2090
- Inscription : jeu. 16 déc. 2004 14:25
- Contact :
Re: Développement Shoot them up
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
Sachant que 255>>8 = 0, la seconde partie est superflue. Tu peux joyeusement remplacer tout ça par:
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+1Code : 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: