MMGOC (Massive Multiplayer Game On-Calc)
Posté le 09/12/2013 18:32
Je cherche des volontaires, actifs ou non, sachant coder en C, pour participer à un projet d'envergure : créer le premier MMO-RPG mode calto : MMGOC (Massive Multiplayer Game On-Calc).
Le principe est simple : une carte Arduino sert de serveur, qui organise les requêtes des différents joueurs connectés à l'Arduino.
Le jeu sera une sorte de RPG hyper simplifié (au début du moins) : on peut bouger sur une carte, voir les joueurs, et comme interaction les attaquer.
L'objectif initial est de créer la prouesse de connecter 5 joueurs minimum. (Sachant qu'une carte Arduino Mega peut accueillir jusqu'à 25 caltos
)
Dans un premier temps, les caltos seront connectées via le port série (3-pins) directement sur la carte. Ensuite, si c'est faisable (et ça l'est, faut juste de l'huile de coude), connecter le serveur via un port Ethernet en ligne de manière à ce que chacun puisse jouer en ligne. Et là ça serai classe 8)
Bien entendu, ça ne sert à rien, sinon qu'à doubler les TI-men dans la quête du concept le plus innovant
(et un peu à se divertir bien sur)
J'ai créé (pour moi, et pour les intéressés) un repo sur Bitbucket de manière à ce que les dévellopeurs aient facilement accès au code.
Si vous voulez faire partie de la team (pas besoin de venir souvent, juste de savoir lire et d'y ajouter votre pierre lorsque vous voulez), n'hésitez pas, je suis ouvert.
Bon, après, si y'a personne c'est pas un problème mais j'aurai personne avec qui tester une fois arrivé au réseau en ligne
Bref, qu'en dites-vous ?
Lien du repo
Citer : Posté le 09/12/2013 18:38 | #
Pas mal comme projet réalisable mais il faudra du temps ce qui est domage j'aurai bien voulu participer mais j'ai déjà 2 projets pour 2014
Citer : Posté le 09/12/2013 18:50 | #
Je pense pouvoir t'aider, ça m'intéresse car j'ai du matos arduino même si j'ai pas ce qu'il faut pour la connection entre les 2 mais je peux t'aider niveau prog!
Citer : Posté le 09/12/2013 19:59 | #
J'aime bien le projet, tu t'en doute je risque de pas pouvoir beaucoup t'aider, par contre j'ai une question : Tu ne souhaites pas que les sources soient ouvertes (ton repo n'est pas publique) ?
Je trouve ça dommage quand on fait un programme comme ça, qui a pour but de faire ce que personne n'a fait avant, de ne pas laisser ça publique. Enfin ce n'est que mon avis
Citer : Posté le 09/12/2013 20:01 | #
J'avais pas fait attention. Je modifie ça
Citer : Posté le 09/12/2013 20:11 | #
Et t'en est où pour l'instant ? T'as réfléchis au protocol et comment va fonctionner le serveur ? Où tu commence déjà par faire le jeu ?
Citer : Posté le 09/12/2013 20:29 | #
J'ai réfléchi (et je continue de le faire) sur le protocole. Je vais commencer par l'échange d'infos entre serveur et calto, puis je construirai le jeu en lui même (déplacements, interactions, etc). Pour ce qui est des collisions, je laisserai le serveur gérer ça.
Citer : Posté le 09/12/2013 21:43 | #
Et comment ça se passe pour faire ton jeu ?
En fait tu envoies le code de l'action que tu souhaites faire au serveur, celui ci attends pour toutes les calto, puis fait tourner le jeu et renvoie aux calto la position, l'action, ... De chaques objets ?
Citer : Posté le 09/12/2013 23:48 | #
C'est très intéressant, le problème étant que je n'ai pas de shield ethernet pour l'arduino, il y aura un moyen de pouvoir connecter plusieurs caltos à l'arduino pour jouer dans être connecté (par exemple si j'emmène mon câble d'alimentation et que je fais des parties multijoueur directement au lycée sans brancher l'arduino à internet (je me suis surement très mal expliqué )) ?
Citer : Posté le 10/12/2013 06:55 | #
C'est la phase 1 du programme : on branché en local les caltos, et on joue entre amis sur le meme arduino
Ce n'est que après que je testerai une version en ligne.
Citer : Posté le 10/12/2013 18:46 | #
J'ai une question: peut-on gérer l'USB avec un add-in (j'aurai peut-être la arduino yùn à Noël et j'aimerai savoir si la com USB est possible)
Citer : Posté le 10/12/2013 18:58 | #
On peut
Par contre ce n'est pas évident quand on ne peut pas tester en live
syscall.h
#define _SYSCALL
/**********************************************************/
/** Les syscall suivants servent à l'acces au port série **/
/** Le buffer de réception fait 1ko, **/
/** et le buffer d'envoi fait 256 octets. **/
/**********************************************************/
void App_RUNMAT(int runMode, unsigned short stripNum);
//Lit un caractère du buffer de réception et le copie a l'adresse pointée par 'dest'
//Retourne 0 en cas de succes, 1 si le buffer est vide, 3 si la connexion n'est pas établie
int Serial_ReadByte(unsigned char *dest);
//Lit 'max' octets du buffer de réception et les écrit dans 'dest'
//'size' donne le nombre d'octets lu
//Retourne 0 en cas de succes, 1 si le buffer est vide, 3 si la connexion n'est pas établie
int Serial_ReadBytes(unsigned char *dest, int max, short *size);
//Ecrit 'byte' dans le buffer d'envoi
//Retourne 0
int Serial_WriteByte(unsigned char byte);
//Ecrit 'size' octets dans le buffer d'envoi depuis l'adresse 'scr'
//Retourne 0 en cas de succes, 2 si le buffer est trop plein, 3 si la connexion n'est pas établie
int Serial_WriteBytes(unsigned char *src, int size);
//FIFO = first in first out
int Serial_WriteByteFIFO(unsigned char byte);
//Retourne la taille des données du buffer de réception
int Serial_GetRxBufferSize(void);
//Retourne l'espace disponible dans le buffer d'envoi
int Serial_GetTxBufferFreeCapacity(void);
//Vide le buffer de réception
//Retourne 0 en cas de succes, 3 si la connexion n'est pas établie
int Serial_ClearReceiveBuffer(void);
//Vide le buffer d'envoi
//Retourne 0
int Serial_ClearTransmitBuffer(void);
//Ouvre et prépare l'interface de communication
//Pour plus de détails, consulter fxreverse-doc-1.pdf ci joint
int Serial_Open(unsigned char *conf);
//Ferme l'interface de communication et vide les buffers d'envoi et de réception
//Si 'mode'==1, la communication est coupée sans regarder s'il reste des données a transmettre
//Si 'mode'!=1, la fonction ne ferme pas l'interface de communication s'il reste des données a transmettre
//et retourne 5
//Retourne 0 en cas de succes (communication terminée) et 5 s'il reste des données a transmettre
int Serial_Close(int mode);
//Copie l'octet numéro 'index' du buffer de réception vers 'dest' si 'index' ne dépasse pas les données du buffer
//Retourne 0 en cas de succes, 1 si 'index' dépasse les données du buffer, 3 si la communication n'est pas établie
int Serial_Peek(int index, unsigned char *dest);
//Récupère le statut de la connexion
//Retourne 1 si la connexion est établie, 3 sinon
int Serial_IsOpen();
#endif
syscall.src
.MACRO SYSCALL FUNO, SYSCALLNAME, TAIL=nop
.export \SYSCALLNAME'
\SYSCALLNAME'
mov.l #h'\FUNO, r0
mov.l #H'80010070, r2
jmp @r2
\TAIL'
.ENDM
SYSCALL 040C, _Serial_ReadByte
SYSCALL 040D, _Serial_ReadBytes
SYSCALL 040E, _Serial_WriteByte
SYSCALL 040F, _Serial_WriteBytes
SYSCALL 0410, _Serial_WriteByteFIFO
SYSCALL 0411, _Serial_GetRxBufferSize
SYSCALL 0412, _Serial_GetTxBufferFreeCapacity
SYSCALL 0413, _Serial_ClearReceiveBuffer
SYSCALL 0414, _Serial_ClearTransmitBuffer
SYSCALL 0418, _Serial_Open
SYSCALL 0419, _Serial_Close
SYSCALL 0422, _Serial_Peek
SYSCALL 0425, _Serial_IsOpen
SYSCALL 0AAE, _App_RUNMAT
.end
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 10/12/2013 19:00 | #
Bon, j’essayerai si j'ai la yùn
Citer : Posté le 10/12/2013 20:04 | #
Je veux bien participer au projet dans la réalisation du moteur de jeu (maps, déplacements, combats), mais je te laisse la partie serveur et connexion des machines. Pour les tests on peut se voir et je peux fournir des calculatrices nécessaires aux tests
Citer : Posté le 10/12/2013 20:18 | #
Je pourrai aider juste au niveau de la prog du jeu aussi je pense
Citer : Posté le 10/12/2013 21:06 | #
Pour les tests, je veux bien.
J'ai réfléchi aujourd'hui, et je me suis vu confronté à un petit problème :
Dans le cas d'un jeu en temps réel (type LOL), la quantité d'infos par frames est proportionnelle au nombre de joueurs à prendre en compte. Ce qui fait que même en laissant à l'Arduino gérer les priorités, c'est à dire dire quelles infos et de qui il faut envoyer (pas besoin de savoir qu'untel à l'autre bout de la map combat avec un autre), il faut imaginer au minimum récupérer les infos de 3 persos.
Dans ce cas, 1 perso prend :
son ID (1 octet, j'espère ne pas avoir à connecter pour le moment plus de 255 caltos)
position X (4 octets, c'est forcément un int si on veut une carte digne de ce nom)
position Y (4 octets, idem)
action en cours (1 octets, ça laisse 255 possibilités, ça devrait aller)
vie (1 octet, vie max = 100. On n'est pas obligé de l'afficher)
Total : minimum 10 octets par perso, soit plus de 30 octets à récupérer à chaque frame...
Pour du 20 fps, ça veut dire 600 octets par seconde... Je doute pouvoir assurer une telle fluidité...
Sinon, l'autre option consiste à faire un jeu au tour par tour type "Dofus", mais dans ce cas d'un, c'est moins cool, de deux il risque d'y avoir des attentes assez chiantes (genre le cas du mec qui oublie de jouer), même avec un compteur.
Qu'en pensez vous ?
Citer : Posté le 10/12/2013 21:08 | #
... ben ... je pense que Dofus est plus simple pour commençer
Même si c'est moi cool que LOL
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 10/12/2013 21:20 | #
Un jeu tour par tour n'a pas besoin de plusieurs caltos, et c'est moins stylé. On peut viser un truc simple mais simultané.
Citer : Posté le 10/12/2013 21:32 | #
pas non plus besoin de savoir gérer 10 caltos en même temps comme pour LOL
Mais c'est sur que trouver un petit jeu en temps réel dès le début pourrait être sympa
Kirafi tu joues encore à lol? c'est pas pour moi, c'est pour que limachi ait un ou 2 copains dans sa liste d'ami
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 10/12/2013 21:34 | #
ou sinon tu fait comme dans guild wars, des donjons avec 2-3 personnes, et par exemple dans les villes avec tout le monde tu devra transférer moins d'info
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 10/12/2013 21:35 | #
je sais !!! Gravity Guy d'ailleurs en parlant de ça, il faudrait voir à changer un petit truc, si je suis pas en facile, c'est trop sensible, j’appuie une fois et ça compte comme 2, donc mon personnage meurt tout le temps
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)