Développement Shoot them up

Le coin des demomakers et des programmeurs en herbe.

Modérateurs : SirG, Redfield1, shubibiman, Laucops

Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développement Shoot them up

Message par touko »

cool demos, tu as mis de la physique pour le saut du renard ??
Avatar de l’utilisateur
pckid
NECrophage
Messages : 1516
Inscription : lun. 26 sept. 2005 11:32
Localisation : ile de france

Re: Développement Shoot them up

Message par pckid »

Je l'ai testé le renard et il saute et retombe bien.
=============================
Pc Kid Renait , et hop !!!
=============================
Avatar de l’utilisateur
Hero_Tonma
Push Run Button!
Messages : 89
Inscription : lun. 20 juil. 2015 14:26

Re: Développement Shoot them up

Message par Hero_Tonma »

touko a écrit :cool demos, tu as mis de la physique pour le saut du renard ??
Of course mon Capitaine. J'ai utilisé un tableau de valeur pour avoir une courbe de saut plus réaliste.
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développement Shoot them up

Message par touko »

Et c'est déjà pas mal,tu progresses très vite . :wink:

Arrêtes tout, et passe au portage d'un strider SGX digne de ce nom, y'en a ici qui attendent,la bouche pleine de bave :P
Avatar de l’utilisateur
Hero_Tonma
Push Run Button!
Messages : 89
Inscription : lun. 20 juil. 2015 14:26

Re: Développement Shoot them up

Message par Hero_Tonma »

touko a écrit :Et c'est déjà pas mal,tu progresses très vite . :wink:

Arrêtes tout, et passe au portage d'un strider SGX digne de ce nom, y'en a ici qui attendent,la bouche pleine de bave :P
Merci.

Je suis toujours ok pour un portage mais il me faudrait les droits avant vu la quantité de boulot sur ce jeu. D'ailleurs si quelqu'un peut avoir les droits sur des jeux arcades anciens (genre taito, konami, capcom, irem ...), ce pourrait être super sympa de faire des suites de jeux. :mrgreen: Nouveaux background, ennemis et Boss.
Avatar de l’utilisateur
Hero_Tonma
Push Run Button!
Messages : 89
Inscription : lun. 20 juil. 2015 14:26

Re: Développement Shoot them up

Message par Hero_Tonma »

Nouvelle question du gros boulet :mrgreen:

Je continue à avancer, j'ai ajouté sans problème 40 bullets à l'écran mais en statique. Maintenant je voudrais les faire bouger et là ça coince. J'ai toujours du mal avec 8bit /16bit. Pour lire les word sur 2 adresses.
J'ai deux choix, soit un tableau qui garde les positions de chaque bullet, soit le changement dynamique dans la satb. Je récupère les positions du sprite #0, ajoute +1 et les réécrit dans le satb.

Je pense avoir saisi la manière dont ça fonctionne. Le satb a 4 word par sprite et comme ma satb se trouve à $7F00 (word 0 = coordonée Y, word1 = X, word2 = pattern et le word3 attribut). un word vaut 15-0 en binary soit 2 fois 0-7. $7F00 = 0-7 et $7F01 = 8-15 pour la position Y.

Je pense utiliser la satb comme il reste des bits inutilisés pour les sprites comme position Y n'utilisent pas bit 15-10, je pourrais les utiliser comme variables : bit15 = 1 hors screen par exemple.

Mais je bloque toujours au niveau code, mon sprite #0 est à #64 en Y, mais ça me retourne #224 :

Code : Tout sélectionner

SATB_BASE 	.equ $7F00
vtest		.ds	2

   stw  SATB_BASE, <_si
	LDY		#0
	LDA		[_si],Y
	STA		vtest
	INY
	LDA		[_si],Y
	STA		vtest+1
Après j'incrémente vtest et recopie dans la satb. pour passer au sprite suivant j'ajoute 8 à mon index.
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développement Shoot them up

Message par touko »

Je continue à avancer, j'ai ajouté sans problème 40 bullets à l'écran mais en statique. Maintenant je voudrais les faire bouger et là ça coince. J'ai toujours du mal avec 8bit /16bit. Pour lire les word sur 2 adresses.
Tu as plusieurs méthode pour récupérer une valeur 16 bits dans un tableau .

Soit en séparant dés le départ tes valeurs LOW et HIGH dans 2 tableaux, et tu y accèdes comme ça

Code : Tout sélectionner

lda mon_tab_low , Y

lda mon_tab_high , Y
Soit dans un même tableau et tu y accèdes comme ça:

Code : Tout sélectionner


lda mon_tab_16bits , Y   // partie LOW

lda mon_tab_16bits + 1 , Y   // partie HIGH

Le premier nécessite une incrementation de Y = Y +1 pour accéder à la valeur suivante, le second nécessite un Y=Y+2 pour la valeur suivante .
J'ai deux choix, soit un tableau qui garde les positions de chaque bullet, soit le changement dynamique dans la satb. Je récupère les positions du sprite #0, ajoute +1 et les réécrit dans le satb.
Oui tu peux utiliser la SAT tu as d'ailleurs des fonctions/macros pour récupérer les données,get_spr_posx, get_spr_posy, get_pattern, etc ..

Code : Tout sélectionner

Je pense utiliser la satb comme il reste des bits inutilisés pour les sprites comme position Y n'utilisent pas bit 15-10, je pourrais les utiliser comme variables : bit15 = 1 hors screen par exemple.
Oui, d'ailleurs je m'en sert aussi, et tu n'as même pas besoin de les masquer quand tu envoies la valeur au VDC, ces bits supplémentaires ne sont pas pris en compte .
Par contre fais attention, dans la SAT la pos Y est ta pos du sprite à l'écran + 64, et la pos x c'est x=x+32 ..
Mais je bloque toujours au niveau code, mon sprite #0 est à #64 en Y, mais ça me retourne #224 :
Même si 224 c'est bizarre, voir infos juste en haut :wink:

Code : Tout sélectionner

SATB_BASE    .equ $7F00
vtest      .ds   2

   stw  SATB_BASE, <_si
   LDY      #0
   LDA      [_si],Y
   STA      vtest
   INY
   LDA      [_si],Y
   STA      vtest+1
le code est bon, il manque plus qu'a soustraire 64 à la valeur récupérée .
REMARQUE: les fonctions get_spr_posx/y font déjà la manip, donc si tu les utilises les valeurs renvoyées sont celles de ton sprite à l'écran .
Avatar de l’utilisateur
Hero_Tonma
Push Run Button!
Messages : 89
Inscription : lun. 20 juil. 2015 14:26

Re: Développement Shoot them up

Message par Hero_Tonma »

:cry: Ca marche pas.

J'ai pas la macro spr_get_y. Seulement dans HuC mais je l'ai transposé sans succès.

J'ai rajouté un # devant mon label SATB_BASE pour avoir l'adresse et non pas le contenu :

Code : Tout sélectionner

stw  	#SATB_BASE, <_si
	
	LDY		#0
	LDA		[_si],Y
	STA		vtest
	INY
	LDA		[_si],Y
	STA		vtest + 1
	subw	#64, vtest
	spr_set #10,satb
	spr_y	      vtest

	RTS
je vois mon sprite en haut de l'écran quand j'ajoute #64 au lien de soustraire #64, et dans mon debug avant de soustraire, j'ai FF dans vtest. Je comprends pas pourquoi, c'est ces petit détail qui me bloque en asm. En tout logique, ça devrait marcher.

Pour la macro spr_get_y : j'ai modifié comme ça :

Code : Tout sélectionner

; spr_get_y(int value)
; ----	
	.macro spr_get_y	
	  stw  	#SATB_BASE, <_si
	  lda	[_si]
	  sub	#64
	  tax
	  ldy	#1
	  lda	[_si],Y
	  sbc	#0
	  rts
	  
	.endm
Peut-être que je dois écrire le résultat. Pour l'instant je le récupère avec A. Et c'est comme ma boucle plus haut, le résultat est pas bon.


Pour l'instant je vais regarder avec les tableaux. Pour les déclarer, tu fais comment : dans les variables ou tu crées un tableau (array_Bullet: dw 0,0,0,0,0, ...) et après tu écris dedans.

Je pene avoir trouvé mais je dois encore faire des tests

Code : Tout sélectionner

array_data:    .ds 256

CLY
			LDA		#$D0
			STA		array_data, Y
			INY
			LDA		#$A0
			STA		array_data, Y
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développement Shoot them up

Message par touko »

je vois mon sprite en haut de l'écran quand j'ajoute #64 au lien de soustraire #64, et dans mon debug avant de soustraire, j'ai FF dans vtest. Je comprends pas pourquoi, c'est ces petit détail qui me bloque en asm. En tout logique, ça devrait marcher.
Nah soustraire 64 c'est pour récupérer Y de ta SAT, pour initialiser Y dans la SAT il faut ajouter 64 . :P
Et avec X c'est 32 .
Donc si tu veux mettre un sprite à la ligne 100 de l'écran, quand tu les mets dans la SAT, il faut faire 100+64,et 164-64 pour récupérer la ligne écran .

Code : Tout sélectionner

stw     #SATB_BASE, <_si
   
   LDY      #0
   LDA      [_si],Y
   STA      vtest
   INY
   LDA      [_si],Y
   STA      vtest + 1
   addw   #64, vtest
   spr_set #10,satb
   spr_y         vtest
Mais vérifies que la fonction spr_y ne le fait pas déjà..
EDIT: Non c'est bon .
je vois mon sprite en haut de l'écran quand j'ajoute #64 au lien de soustraire #64, et dans mon debug avant de soustraire, j'ai FF dans vtest.
Dur de dire pk cette valeur tout dépend comment à été initialisé la SAT avant .
Pour spr_gety, il faut faire un spr_set avant.

Code : Tout sélectionner

; spr_get_y(int value)
; ----   
   .macro spr_get_y 
     ldy   #1
     lda   [_si],Y
     tax
     lda   [_si]
    sec
    sbc   #64
    bcs   .pas_inc_high
    dex
 .pas_inc_high:   // reg A=partie LOW ,reg X partie HIGH 
   .endm
Pour les tableaux

Code : Tout sélectionner


.bank $XX      // On déclare les constantes dans un BANK
 .org  $$$$$
       mon_tab:       .dw  1000,512,320       // ça déclare un tableau de nombres constants sur 16 bits 
       mon_tab:       .db   10,5,240    // ça déclare un tableau de nombres constants sur 8 bits 

.bss   // On déclare un tableau/variable de X octets en RAM 
mon_tab:       .ds  100       // ça réserve un tableau de 100 octets ou 50 int en RAM, y'a pas de notion de 8/16                   bits, tout est 8 bit 
C'est normal que certaines notions t'échappent encore, ça va venir avec l'habitude, là tu manges 2 choses d'un coup, l'ASM+les spécificités hardware de la console .
Avatar de l’utilisateur
Hero_Tonma
Push Run Button!
Messages : 89
Inscription : lun. 20 juil. 2015 14:26

Re: Développement Shoot them up

Message par Hero_Tonma »

Merci pour ta patience :mrgreen: parce que je suis un gros boulet et que là je vais péter un plomb.

Ma première fonction ne marche pas du tout. Je comprends vraiment pas pourquoi, je referais un test avec un code simple où j'ai juste un sprite. Pourtant elle me semble bonne.

Avec mon tableau ca plante aussi surtout avec mes coordonnées en X. :x

Par contre, j'ai réussi avec ta .macro spr_get_y , j'arrive à boucler sur l'écran de bas en haut en Y donc. Avec test hors écran qui marche avec dépassement de 256 pixels.
Mais quand j'ajoute une macro spr_get_x, alors ça bug dans tous les sens.

Code : Tout sélectionner

; spr_get_x(int value)
; ----      
	.macro spr_get_x
	ldy	#2
	lda   [_si],Y
    tax
    lda   [_si]
    sec
    sbc   #32
    bcs   .pas_incx
    dex
	.pas_incx: 
	.endm
Mon code pour changer les X / Y (version simplifié)

Code : Tout sélectionner

move_bullet:


	spr_set #50,satb
	spr_get_x
	STA		vtest2
	STX		vtest2 + 1	
	subw	#1, vtest2
	addw	#32, vtest2
	spr_get_y
	STA		vtest
	STX		vtest + 1	
	subw	#3, vtest
	addw	#64, vtest
	spr_x	 vtest2
	spr_y	vtest


	RTS
En Y ça passe, mais si je rajoute le X, mon sprite se déplace en diagonale quelque soit la valeur soustraite avec subw #1,vtest2. Comme si il me lisait la valeur Y en X.

Bon, je vais aller couper de bois pour me calmer et réflechir.

P.S. Je me fait pas de soucis, j'ai juste dû oublier une ligne quelque part. Je suis sûr que dans 2 heures ça fonctionnera ... peut-être
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Re: Développement Shoot them up

Message par MooZ »

Je crois voir le problême. Tu fais:

Code : Tout sélectionner

    ldy #2
    lda [_si], Y
    lda [_si]
Tu prends donc l'octet #2 et ... #0. Hors c'est plutôt l'octet #3 et #2 qu'il faut.

Code : Tout sélectionner

    ldy #3
    lda [_si], Y
    tax
    dey
    lda [_si], Y
    sbc #32
...
Avatar de l’utilisateur
Hero_Tonma
Push Run Button!
Messages : 89
Inscription : lun. 20 juil. 2015 14:26

Re: Développement Shoot them up

Message par Hero_Tonma »

Merci, encore une erreur de gros débutant. C'est ça ou je dois arrêter de développer quand j'ai des migraines.

Je test ça mais je suis sûr que ça va marcher.
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développement Shoot them up

Message par touko »

Bien vu mooz :wink:

Je sais pas si mkit le prend en charge(sous huc ça marche), mais tu peux faire ça :

Code : Tout sélectionner

ldy #xx
lda [ _si ] , Y

Peut s'écrire
lda [ _si ].xx  // Cela va générer le code du haut dans le .s

Avatar de l’utilisateur
Hero_Tonma
Push Run Button!
Messages : 89
Inscription : lun. 20 juil. 2015 14:26

Re: Développement Shoot them up

Message par Hero_Tonma »

J'ai pas eut trop de temps ces derniers jours.
Mais grâce à vos conseils, j'arrive maintenant à accéder aux données des sprites.

J'ai pu ajouter la possibilité de tirer avec mon vaisseau. Plusieurs tirs qui se déplacent et test hors screen. Bien sûr, j'ai du faire une erreur dans ma gestion de mouvement des tirs, donc je préfère la réécrire entièrement. Quand j'aurais 5 minutes et une prochaine vidéo.


Edit : Après une journée à me taper la tête contre les murs. J'ai "enfin" réussi à réécrire ma fonction après une nuit de sommeil pour que tout le code du jeu marche. Je peux tirer des missiles. C'est basique mais ça marche.
Avatar de l’utilisateur
Hero_Tonma
Push Run Button!
Messages : 89
Inscription : lun. 20 juil. 2015 14:26

Re: Développement Shoot them up

Message par Hero_Tonma »

Enfin des news. J'ai pas eut beaucoup de temps à consacrer mais je suis toujours bien là. :mrgreen:

J'ai pu avancer sur mes tests et je pense pouvoir bien avancer sur un premier niveau, voir un mode caravan pour débuter.
Je dois juste réécrire une partie de mes tests de collisions.

Image

Une petite vidéo pour voir l'avancement :
https://youtu.be/NtWgnbsHHpY
Répondre