Jump to content
ichigobankai

BOoM - Bomberman Sega Master System - mon "petit" dev en cours

Recommended Posts

Voila pourquoi je ne suis pas trop présent depuis qq semaines, je "tente" de finir un dev pour le concours annuel de smspower (qui fini le 27 mars).
 
Evidemment, comme j'ai les défis, l'ai commencé à m'y pencher le weekend du 1er mars ^^

Comme tout bomberman, celui-ci peut se jouer à 4 en même temps, via un multitap homemade.
et comme le code qui gère le multitap n'est pas dans les emulateurs, vous ne pouvez pas y jouer sur emu  :mrgreen: 
 
C'est développé en C (small-c) via la lib z88dk, et mon pote Vingazole me donne un coup de main sur certaines parties critiques/bouffeuses de cycles et me les converti en assembleur z80.

J'ai piqué les sprites de la version pc engine, une petite adaptation due aux palettes, et ma fois ca rend plutot pas mal. J'ai diminué légèrement les persos pour qu'ils logent en 16x24 pixels (a l'origine c'est dans du 24x24 avec de la perte)
 
post-5150-0-31115300-1395184505_thumb.jpg
 



Dans les trucs prévus:
- menu d'accueil selection de 2 à 4 joueurs (et bcp plus tard peu etre un mode "story" en solo...a voir)
- une page de selection avec des "arenes" thématiques basées sur l'univers master system (sonic & cie)
- musiques / bruitages
- implanter un système de bankswitch pour avoir une rom > 48ko (vingazole devrait se pencher dessus ainsi que sur l'intégration du player MML pour la musique). j'ai déjà un code pour ca, mais Vin m'a dit qu'on devrait pouvoir le simplifier (car c'est une petite usine à gaz)

voila voila.

je devrais terminer de coder la partie "explosions" dans la semaine...j'essaierais de poster/tenir a jour "une sorte de wip". Pour terminer c'est pas toujours simple, autant je maîtrise assez bien le php/js que le C je découvre la joie des structures & des pointeurs ^^

Share this post


Link to post
Share on other sites

O_o' purée, c'est beau !

 

C'est de la master system ça ?

 

Bon courage l'ami !

 

Curieux de voir un passage en C optimisé en asm, même s'il est probable que je n'y comprenne pas grand chose !

Share this post


Link to post
Share on other sites

oui oui c'est bien de la master system ;)

 

pour un bout de code qui gère le y/zorder (pour que les persos soient devant/derrière en fonction de leur position Y) :

 

en C,

pas trop compliqué :

(y'a 2 valeurs, la position Y et l'id du perso, pour ensuite faire le trie et réordonner le SAT -la liste des sprites-)

//Y order Dec
	   for(i=0;i<nb;i++){
	        for(j=i;j<nb;j++){
	            if(buffer[j] >= buffer[i]){
	                temp=buffer[i];
	                temp_b=buffer[i+nb];
	                
	                buffer[i]=buffer[j];
	                buffer[i+nb]=buffer[j+nb];
	                             
	                buffer[j+nb]=temp_b;
	                buffer[j]=temp;
	             }
	        }
	    }

en ASM :

void yorder(unsigned char * buffer, unsigned char nb) {

  #asm

    ld	   hl, 2
    add   hl, sp
    ld	   b, (hl)	  ; b = nb
    inc   hl
    inc   hl
    ld	   e, (hl)
    inc   hl
    ld    d,(hl)         ; de = buffer

    ld    h,d
    ld    l,e            ; hl = buffer

 yorder_loop1:
    ld    d,h
    ld    e,l            ; de = hl

    ld    c,b            ; c = b

 yorder_loop2:

    ld    a,(de)
    cp    (hl)

    jr    c,yorder_after_swap

    push  hl          ; SWAP
    push  de
    push  bc

    ld    a,(de)         ; swap [hl],[de]
    ld    b,(hl)
    ld    (hl),a
    ld    a,b
    ld    (de),a

    inc   hl             ; swap [hl+4],[de+4]
    inc   hl
    inc   hl
    inc   hl

    inc   de
    inc   de
    inc   de
    inc   de

    ld    a,(de)
    ld    b,(hl)
    ld    (hl),a
    ld    a,b
    ld    (de),a

    pop   bc
    pop   de
    pop   hl

 yorder_after_swap:
    inc   de
    dec   c
    jr    nz,yorder_loop2

    inc   hl
    djnz  yorder_loop1

    ret
  #endasm
} 

Share this post


Link to post
Share on other sites

Merci pour vos encouragements ;)

 

pour le code source, je n'y ai pas encore réfléchi, mais pourquoi pas.

De toute facon sans la partie "elec" du multitap,

ca ne peut pas etre utilisé pour faire du commerce car du coup on ne peut y jouer qu'à 1 sur le hard ^^

(et ca ne marche pas sur emu je le rappel, en fait on déplace les 4 persos en même temps)

Share this post


Link to post
Share on other sites

Petit copié/collé de ce que j'ai poste sur master-system france :

 

les explosions sont en cours.
La propagation des flammes est ok, déjà un bon point.

msbomb10.png

msbomb11.png

plus qu'a déclencher la mort des persos, exploser les murs destructibles et libérer les items...

Share this post


Link to post
Share on other sites

put***, c'est E N O R M E !!!

 

Franchement, quand je regarde les images, j'ai l'impression que c'est de la SNES :shock:

 

Par curiosité, tu comptes faire comment au final pour le multitap ? Un adaptateur de multiplexage sur les ports manettes ?  ou un rajout sur le PCB de la cartouche ? Ou carrément un multitap de Megadrive ?

 

En tous cas, si tu mènes bien ce projet au bout, je suis hyper intéressé pour m'en faire un (en multi évidemment :mrgreen: )

 

Dernière question, ça monte à combien de kb la rom ?

 

 

 

Edit : J'ai trouvé une doc sur le fonctionnement du multitap megadrive... genesis_multitap.txt

Share this post


Link to post
Share on other sites

J'ai evidemment avancé depuis le 23, là je corrige des bugs et c'est loin d'être simple.

 

J'ai rajouté écran titre, choix de mode de jeu (2, 3 ou 4 players) et j'ai mis en place une ébauche de la mort des persos. J'ai réédité les tiles de flammes et ré-arangé les tiles.

Mais j'ai encore des trucs a caler sur les explosions avant que mon pote vingazole mette ca en ASM...niveau timing c'est chaud ^^

J'ai egalement rajouté 3 petites fonctions en ASM pour activer/desactiver l'écran et vider la vram.

 

pour le multitap, c'est un multitap spécifique externe.

pour l'instant la rom fait 41ko, sans aucune compression au niveau données.

Avec la compression aPlib, ca doit se diviser par ~4.

Share this post


Link to post
Share on other sites

Super sympa.

 

Par contre, j'ai réussi à faire planter le jeu (sous fusion)

 

En fait, au départ, le perso marche assez vite. Dès que je pose des bombes, il ralenti (normal ou pas?)

 

Je m'amusais à poser des bombes et à attendre qu'elles explosent pour voir l'animation de l'explosion. La, une explosion commence à un endroit ou je n'avais pas posé de bombe, et le jeu freeze.

 

Bon, je sais que c'est pas fini, et ce que tu as déjà fait en si peu de temps est déjà énorme  ;-)

Share this post


Link to post
Share on other sites

Je n'ai pas réussi a faire planter, mais par contre j'utilise quasi exclusivement meka comme ému (et surtout pour debugguer).

Avec Vingazole on a prévu de changer de compilo pour passer a SDCC, car z88dk optimise pas grand chose et converti en asm n'importe comment... on devrait avoir un gain de vitesse entre 5x à 10x en passant par SDCC, qui lui est optimisé et génère un fichier plus légé.

 

pour rigoler : http://www.cpcmania.com/Docs/Programming/SDCC_vs_z88dk_Comparing_size_and_speed.htm

 

En attendant j'ai encore pas mal de petites choses à coder dont la génération aléatoire du terrain, la récup des items (ca c'est pas trop dure)

Share this post


Link to post
Share on other sites

J'ai ajouté les explosions chaînées et corrigé/fixé 2/3 trucs (death/résultats...).

Une nouvelle version sera dispo quand j'aurai mis en place la génération aléatoire du terrain avec les blocs destructibles.

 

Ensuite tout ce qui est stage select/music etc. attendront que le projet soit basculé sur SDCC.

Share this post


Link to post
Share on other sites

Tu penses qu'au final, avec compression tu arriveras à passer sous les 32k ? (me reste plus qu'un after burner =-) )

 

pour l'instant la rom fait 41ko, sans aucune compression au niveau données.

Avec la compression aPlib, ca doit se diviser par ~4.

:mrgreen:

Share this post


Link to post
Share on other sites

Tant que ca en dépasse pas les 48k tu peux le faire sur un pcb sans mapper ;)

(3 banks de 16ko, c'est le max absolu sans mapper)

comme les eproms de 48ko n'existent pas, il faut une eprom de 64ko (27c512)

 

depuis mon message du 25, j'ai passé plusieurs morceaux de graphismes via aPLib,  mais pour l'utiliser il faut rajouter du code...du coup je suis toujours à 42ko, mais avec plus de graphismes.

Il me reste l'écran titre a compressé, mais il faut que je le découpe de plusieurs morceaux, car je n'ai alloué que 3k de ram pour le décodage/decompression des données. (et l'écran titre entier aurait besoin de 8k de ram, soit la totalité et moi j'en ai besoin pour d'autres "trucs" )

Share this post


Link to post
Share on other sites

×
×
  • Create New...