[Touko] Galaxian

Vive les jeux indépendants !

Modérateurs : SirG, Redfield1, shubibiman, Laucops

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

Re: code source de GALAXIAN

Message par touko »

Nan mais en plus c'est moi qui t'avais demandé un truc juste fonctionnel (à l'époque pour tester sur flashcard), donc le CD était un bonus ..

Mais le mec qui l'avait avant, a fait un boulot de sagouin dessus, en bidouillant l'alim de façon crade ..
Avec tony on avait fait ce qu'on pouvait avec, un fois le cours jus dans l'alim supprimé ..
La din pour le son/video, était merdique (les contacts se faisaient à moitié), le CD, il a fallu l'alimenter en +12v (quand on sait qu'il faut du 9,5 v) .

Sinon, de l'extérieur elle est niquel, mais faut pas regarder dedans :mrgreen:
Avatar de l’utilisateur
boby jack
NECrophile
Messages : 768
Inscription : sam. 02 oct. 2004 17:48
Contact :

Re: code source de GALAXIAN

Message par boby jack »

nan mais oué, j'étais conscient de ce que je te confiais, tony m'avait fait son topo avant.. :lol: et il avait fini de la réanimer un jour où j'étais pas là en effet.

ça restait un bout de coque noire estampillé "NEC" que j'avais acheté pour seulement 65€in de mémoire... :mrgreen:
Viendez voir mon site, qu'il est vachement beau ! ==> http://bobygeek.fr/
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: code source de GALAXIAN

Message par touko »

Par contre, si y'a moyen de l'avoir(en prêt) pour continuer à faire des tests dessus, je veux bien financer l'achat d'une lentille pour la duo ..
Mais bon je sais pas si c'est vraiment la lentille qui est out .
philippe
Please Insert Disc!
Messages : 29
Inscription : ven. 01 oct. 2010 19:49

Re: code source de GALAXIAN

Message par philippe »

Salut touko, j'ai testé ton code et as-tu une idée pour faire du tir orienté (bullets ennemis contre le shiplayer) avec le 6502 ?

ci-joint un code pour PC en purebasic , assez proche du C :
http://www.mirari.fr/GHGo
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: code source de GALAXIAN

Message par touko »

CAD tir orienté ??? (dsl j'ai pas trop compris le code :mrgreen: )

En quoi, C, assembleur ??
philippe
Please Insert Disc!
Messages : 29
Inscription : ven. 01 oct. 2010 19:49

Re: code source de GALAXIAN

Message par philippe »

touko a écrit :CAD tir orienté ??? (dsl j'ai pas trop compris le code :mrgreen: )

En quoi, C, assembleur ??
en assembleur, c'est mieux. ;)
pour le code voici quelques explications, d'abord création d'une liste chainée, objet tir() :

Code : Tout sélectionner

Structure objet ;- variables pour les clones (liste chainées).

objetetat.w

objetx.f 
objety.f 
objetxs.f 
objetys.f 
objetangle.f

objetspeed.w

EndStructure
Global NewList trait.objet() ; -> #raquette 
Global NewList tir.objet() ; -> #tir

Alors, on commence par la création de l'objet tir() :

Code : Tout sélectionner

    LastElement(tir())
    AddElement(tir())
    tir()\objetetat=1
    tir()\objetx=512 
    tir()\objety=384    
    tir()\objetspeed=16 ;- vitesse des boulettes

    ForEach trait()
      If trait()\objetetat=1;- raquette( ici la cible, car nous avons besoin de connaitre ses coordonnées X et Y)
        ; pense bête: GetAngle( bouletteX,bouletteY, cibleX,cibleY)
        
        tir()\objetangle = GetAngle(tir()\objetx,tir()\objety, trait()\objetx+16,trait()\objety)
        
        ; milieu de la raquette(taille:64*16) -> 64/2=32 puis 32-16( car disque rouge 16) et donc trait()\objetx+16
      EndIf
    Next
      
    tir()\objetxs = Sin(tir()\objetangle*(3.14/180))*tir()\objetspeed
    tir()\objetys = Cos(tir()\objetangle*(3.14/180))*tir()\objetspeed 
exemple
tir()\objetx=512 là on met l'objet au milieu de l'écran coordonnée X = 512

La procedure mathématique:

Code : Tout sélectionner

Procedure.f GetAngle(gx,gy, tx,ty) ; g comme go( départ de l'action) et t comme target( l'objet cible à toucher). 
  a.f = tx-gx
  b.f = ty-gy
  c.f = Sqr(a*a+b*b) 
  angle.f = -ACos(a/c)*57.29577 

  If ty < gy : angle=360-angle : EndIf 
  If ty > gy : angle=360+angle : EndIf

  ProcedureReturn angle+90 
EndProcedure 
Et l'affichage des objet tir() en liste chainée

Code : Tout sélectionner

  ForEach tir()
    If tir()\objetetat=1;- clone tir
      nbrtir+1 ; connaitre le nbre de tirs
      
      DisplayTransparentSprite ( #tird , tir()\objetx, tir()\objety)
      
      tir()\objetx=tir()\objetx+tir()\objetxs
      tir()\objety=tir()\objety+tir()\objetys 

      
      If tir()\objetx>1024 Or tir()\objetx<0 Or tir()\objety>700 Or tir()\objety<0
        DeleteElement(tir()) 
        Continue
      EndIf
      
    EndIf     
  Next  
j'ai fabriqué un executable, faut un pc window pas trop ancien et un anti virus pas trop regardant ;)
http://www.mirari.fr/DbJk
touche X du clavier pour déclencher le tir, et tu peux bouger la raquette avec les flèches directionnelles du clavier. C'est en fait un petit programme de test pour faire du shump avec des ennemis qui tirent en direction du vaisseau du joueur par exemple.

ps: sur le 7800, il y a le code source asm de xevious dispo sur game-developers.org/node/72
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: code source de GALAXIAN

Message par touko »

Bon ok avec le prog c'est mieux :mrgreen: ..

Bon en fait tu veux faire un tir qui suive le joueur ..
Tu peux facilement le faire en C, avec huc ..

Il faut faire un sprite tir, que ut déplace avec un delais, ne fonction du joueur ..
Le problème de faire ça en assembleur, c'est que ça risque de pas pouvoir être gérable facilement avec huc .
philippe
Please Insert Disc!
Messages : 29
Inscription : ven. 01 oct. 2010 19:49

Re: code source de GALAXIAN

Message par philippe »

touko a écrit :Bon ok avec le prog c'est mieux :mrgreen: ..

Bon en fait tu veux faire un tir qui suive le joueur ..
Tu peux facilement le faire en C, avec huc ..

Il faut faire un sprite tir, que ut déplace avec un delais, ne fonction du joueur ..
Le problème de faire ça en assembleur, c'est que ça risque de pas pouvoir être gérable facilement avec huc .
Une version C m'intéresse aussi, même si ça risque de ramer pas mal. :mrgreen:
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: code source de GALAXIAN

Message par touko »

Ok si tu veux que je la fasse en assembleur, il faut que tu m'envoies ton code source, pour que j'intègre ça au mieux .. :wink:

Ou alors, faut que j'essaye de faire une fonction générique ..
bfg
Please Insert Disc!
Messages : 26
Inscription : mer. 25 janv. 2012 16:38
Contact :

Re: code source de GALAXIAN

Message par bfg »

Voici un code source ColecoVision qui fait je pense ce que tu cherches. Ca utilise un algo de bresenham modifié. En gros, il y à un vaisseau au milieu de l'écran et toi du tourne autour, et lui tire vers toi quelquesoit ta position dans l'écran. J'espère que ça peut t'aider ...

Code : Tout sélectionner



#include <string.h>
#include <coleco.h>
#include <getput1.h>

#define MAXBULLET 8
struct Bullet {
    byte flags;
    byte sprite;
    byte dx,dy;
    int err;
} bullet[MAXBULLET];
#define BUL_ACTIVE 0x80
#define BUL_UP 0x1
#define BUL_LEFT 0x2

void updatebullet(int id)
{
	byte s=bullet[id].sprite;
	byte dx=bullet[id].dx;
	byte dy=bullet[id].dy;
	int e2;

	if((bullet[id].flags&BUL_ACTIVE)==0) return; // not active.
	
	if(sprites[s].x==255 || sprites[s].x==0 || sprites[s].y==0 || sprites[s].y==191) {
		bullet[id].flags=0; // sprite inactive.
		sprites[s].y=192; // off screen.
	}
	e2=bullet[id].err<<1;
	if( e2 > -dy) {
		bullet[id].err-=dy;
		sprites[s].x+=(bullet[id].flags&BUL_LEFT)?-1:1;
	}
	if( e2 < dx ) {
		bullet[id].err+=dx;
		sprites[s].y+=(bullet[id].flags&BUL_UP)?-1:1;
	}
}

int newsprite(int id,int x0,int y0)
{
	const int reserved=2;
	sprites[id+reserved].x=x0;	// reserve first two sprites for player and enemy.
	sprites[id+reserved].y=y0;
	sprites[id+reserved].pattern=8;  // Our bullet pattern
	sprites[id+reserved].colour=15;	// VDP_WHITE
	return id+reserved;
}

int newbullet(int x0,int y0,int x1,int y1)
{
	int i;
	for(i=0;i<MAXBULLET;i++) {
		if(bullet[i].flags&BUL_ACTIVE) continue;
		/* found an unused bullet, so let's set it up.*/
		bullet[i].sprite=newsprite(i,x0,y0);
		bullet[i].flags=BUL_ACTIVE;
		bullet[i].flags|=(x0<x1)?0:BUL_LEFT;
		bullet[i].flags|=(y0<y1)?0:BUL_UP;
		bullet[i].dx=(x0<x1)?x1-x0:x0-x1;
		bullet[i].dy=(y0<y1)?y1-y0:y0-y1;
		bullet[i].err=bullet[i].dx-bullet[i].dy;
		return i;
	}
	return 0;	// all bullets still active.
}

const byte shipsPat[]={
	0x0f,0x1f,0x3f,0xff,0xff,0x3f,0x1f,0x0f,
	0x0f,0x1f,0x3f,0xff,0xff,0x3f,0x1f,0x0f,
	0xf0,0xf8,0xfc,0xff,0xff,0xfc,0xf8,0xf0,
	0xf0,0xf8,0xfc,0xff,0xff,0xfc,0xf8,0xf0,

	0x10,0x30,0xc3,0xcf,0xcf,0x3c,0x30,0x10,
	0x10,0x30,0xc3,0xcf,0xcf,0x3c,0x30,0x10,
	0x08,0x0c,0xc3,0xf3,0xf3,0x3c,0x0c,0x08,
	0x08,0x0c,0xc3,0xf3,0xf3,0x3c,0x0c,0x08,

	0x60,0xd0,0xf0,0x60,0,0,0,0,
	0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,
};

void main()
{
	int i;
	int frame=0;

	screen_mode_1_text();
	sprites_16x16();
	change_spattern(0,shipsPat,3*4);
	sprites[0].x=128;
	sprites[0].y=96;
	sprites[0].pattern=0;
	sprites[0].colour=11;
	sprites[1].x=192;
	sprites[1].y=64;
	sprites[1].pattern=4;
	sprites[1].colour=13;
	for(i=2;i<32;i++) sprites[i].y=0xd0;
	updatesprites(0,12);
	fill_color(0,0x61,255);
	load_ascii();
	cls();
	screen_on();
	print_at(2,0,"Stop, or I'll say stop again!");

	for(;;) {
		
		delay(1);
		for(i=0;i<MAXBULLET;i++) {
			updatebullet(i);
			updatebullet(i);	// 2 pixels per 60th.
		}
		if((frame&15)==0) newbullet(sprites[0].x+8,sprites[0].y+8,sprites[1].x+8,sprites[1].y+8);
		frame++;
		// user to dodge the bullets.
		disable_nmi();
		if(joypad_1&LEFT) sprites[1].x--;
		if(joypad_1&RIGHT) sprites[1].x++;
		if(joypad_1&UP) sprites[1].y--;
		if(joypad_1&DOWN) sprites[1].y++;
		enable_nmi();
		


		// draw the effects.
		updatesprites(0,12);
	}
}

void nmi()
{
	;
}


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

Re: code source de GALAXIAN

Message par touko »

Poufff,c'est pas du code de gay ça :mrgreen: .
philippe
Please Insert Disc!
Messages : 29
Inscription : ven. 01 oct. 2010 19:49

Re: code source de GALAXIAN

Message par philippe »

Grand merci bfg, je vais étudier ton code. :D
Répondre