Author Topic: [Programmation] ou comment créer des jeux à l'ancienne !  (Read 11510 times)

Offline Bast

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 1 589
  • Bonus Pute: 70
  • Alors, si t'en casses 4, ça va faire une omelette!
[Programmation] ou comment créer des jeux à l'ancienne !
« on: 18 September, 2014, 11:03:55 »
Salut à tous.

Ce nouveau topic a un but très simple : savoir comment étaient codés nos jeux préférés, et surtout tenter de reproduire certaines techniques pour développer son propre jeu.

Mon sentiment c'est que beaucoup de choses étaient réalisées de manière optimisée, et que maintenant on ne sait pas très bien comment ces choses là étaient faites, de manière simple et efficace, sans utiliser des artifices récents.

Ici nous pourrons donc longuement débattre de scrolling, parallaxe, programmation avec ou sans notion de classe..

S'il est très facile de programmer un clone de pong (savez-vous tous le faire ?) ce n'est pas la même chose pour un astéroïds (même basique...) ou un jeu de plateformes..

Vous l'avez compris, je viens ici à la pêche aux infos et aussi pour créer un espace de discussion. Si vous avez de bonnes idées sur des trucs et astuces de cet ordre voire que vous programmez ou avez programmé des jeux dignes du oldisme, je vous invite donc à rédiger de looooonngggsss posts explicatifs, qu'on pourrait - pourquoi pas - convertir ensuite en tutos oldies :)

Première chose que j'ai envie de reproduire : les routes en pseudo 3D des jeux de bagnole style OutRun. La page la plus intéressante que j'ai choppé est http://www.extentofthejam.com/pseudo/ . A vous les studios !



Offline Fungus

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 5 633
  • Bonus Pute: 387
  • 1000 years of bitchin'
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #1 on: 18 September, 2014, 11:51:38 »
Quote
Lou's Pseudo 3d

Bon sang, l'espace d'un instant j'ai cru être renvoyé sur une page en basque.


Cette année, avec mes élèves j'ai décidé d'être ambitieux et de mettre en place un projet programmation, histoire de leur faire comprendre les bases et faire travailler la logique, la réflexion, les mathématiques. Pour ça j'ai choisi Scratch, un logiciel avec une approche simple et intuitive qui permet de faire des choses assez chiadées. En terme d'optimisation c'est un peu à la ramasse dès que l'on tend vers du sophistiqué mais c'est un outil tout de même assez formidable.

D'autant que lorsque je vois certains programmes "éducatifs" que j'utilise au boulot, ça me donne envie de me mettre à la ligne de code, histoire de sortir l'Education Nationale du syndrome "Adibou et les nombres magiques - 1996". 

Offline Bast

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 1 589
  • Bonus Pute: 70
  • Alors, si t'en casses 4, ça va faire une omelette!
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #2 on: 18 September, 2014, 13:33:14 »
Une idée très sympa en Scratch pour des "grands" : programmer l'affichage d'une horloge à aiguilles.

Offline Tog

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 3 117
  • Bonus Pute: 96
  • Physicien le jour, Maitre-chien la nuit
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #3 on: 18 September, 2014, 14:44:41 »
Sans forcément faire des jeux. L'arduino (modèle UNO) c'est rigolo, on peut piloter plein de trucs. Couplé avec un rasberry pi c'est du bonheur. Electronique et programmation pour un peu plus de 100 € de budget.

Au labo on a quelqu'un qui pilote une manip comme ça.

http://www.amazon.fr/Arduino-Genuine-Starter-Kit/dp/B009UKZV0A/ref=sr_1_1/280-8696622-9048704?ie=UTF8&qid=1411043897&sr=8-1&keywords=arduino+starter+kit

Sinon Lego mindstrom. Les robots ça marche toujours.  :D

Certes, c'est probablement plus collège/lycée.
« Last Edit: 18 September, 2014, 15:12:14 by Tog »

Offline Orkestra

  • Full Member
  • ***
  • Posts: 197
  • Bonus Pute: 5
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #4 on: 19 September, 2014, 11:00:49 »
Pour partager ma maigre expérience : j'ai commencé à vaguement "coder" des sites internet simples (html, css ; des très très vagues notions de jquery) il y a un an environ (un exemple un peu "ludique" : cliquer sur le bonhomme pour voir des changements). Et puis je suis tombé sur une vidéo, sur le site de CanardPC, sur laquelle Pipo et un autre mec lançaient un tuto pour développer un jeu via Game Maker.

Du coup j'ai tenté l'expérience, à tatons (parce que mon jeu n'a rien à voir avec ce qu'ils présentaient sur CanardPC), en bidouillant énormément (l'optimisation ? Pourquoi faire ?), je suis fier de présenter la version pré-pré-pré-pré-alpha de Super Peach Sista ! (windows only, F4 pour passer en plein écran, je crois. Les flèches ou ZQSD pour se déplacer)
Bon, là je suis sur un mac et je ne sais plus du tout quelle version du jeu je suis en train de vous présenter : le principe est simple : Peach en a marre d'attendre que Mario vienne la libérer, donc elle décide de s'enfuir. Normalement on devrait refaire tout Super Mario Bros 1 à l'envers mais vous remarquerez que je n'ai préparé qu'une version du niveau I - 2 pour l'instant.
Et puis un mode deux joueurs où le premier arrivé à la fin (de Mario, qui fait le niveau à l'endroit, et Peach, qui fait donc le niveau à l'envers) a gagné. Sans vraie séparation entre les "écrans" des deux joueurs parce que je trouvais ça rigolo, mais visiblement ça perturbe pas mal de monde.

Je suis loin d'être capable de faire un quelconque tuto, d'autant que ça fait longtemps que je ne me suis pas replongé dans ce projet, mais je peux éventuellement évoquer mes problèmes de développement si ça intéresse quelqu'un.

Offline NICOSMOS

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 4 223
  • Bonus Pute: 192
    • La case de Kaz
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #5 on: 19 September, 2014, 13:03:47 »
Sans forcément faire des jeux. L'arduino (modèle UNO) c'est rigolo, on peut piloter plein de trucs. Couplé avec un rasberry pi c'est du bonheur. Electronique et programmation pour un peu plus de 100 € de budget.

Au labo on a quelqu'un qui pilote une manip comme ça.

http://www.amazon.fr/Arduino-Genuine-Starter-Kit/dp/B009UKZV0A/ref=sr_1_1/280-8696622-9048704?ie=UTF8&qid=1411043897&sr=8-1&keywords=arduino+starter+kit

Sinon Lego mindstrom. Les robots ça marche toujours.  :D

Certes, c'est probablement plus collège/lycée.

Je confirme, mon père fait joujou avec ces modules et s'en sert pour enseigner l'électronique embarquée  à l'EPSI de Lyon.

Et les Lego Mindstorms, j'abonde en ce sens. J'ai eu ceux qui sont sortis quand j'avais 10 ou 11 ans et j'avais passé un temps fou à tester des trucs. Et encore, j'avais trouvé le logiciel de programmation trop riche pour moi, il y avait plein de possibilités que je n'osais explorer avec toutes les histoires de variables, etc, mais c'est extrêmement bien fait. A approfondir, donc.

Offline zanrek

  • Hero Member
  • *****
  • Posts: 575
  • Bonus Pute: 7
  • Geoisbour
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #6 on: 19 September, 2014, 22:45:23 »
A l'époque j'avais réussi à coder un semblant de DDR (dance dance revolution) sur Mega CD. J'avais attaqué çà avec du C. J'avais choppé une sorte de framework sur le net pour wompiler sur la console puis choppé 2~3 utilitaires pour faire passer la ROM crée sur un CD et mettre les bons headers pour le faire booter sur mon MegaCD Euro.

Grosso modo le soft était pas bien lourd (çà affichait les sprites des flèches seulement) avec un vague menu de sélection des chansons en mode texte, un compteur de combo et... c'est tout. Les chansons étaient directement lues par le megaCD au format Wav. J'ai pas été jusqu'à créer les tapis de danse (c'était prévu en recyclant la manette master system que j'avais faite en lego) mais çà machottait plutôt pas mal... Après il fallait être méga synchro parceque j'avais prévu que le combo était validé à la frame près...

Faudrait que je recherche si le soft existe toujours (j'avais codé çà en BTS suite à mes débuts sur l'assembleur X68000) donc çà date de hum.... 2005-2006... date ou DDR était à la mode ... et où je sauvegardais peu.

En revanche je sais que l'outil de dev et de compil pour megadrive existe toujours : https://code.google.com/p/sgdk/

Je sais plus si il est mis à jour, mais çà fonctionnait pas mal. En revanche il me semble qu'il fallait compiler sous linux...

Sinon au taf je bosse sur l'IMX6, un peu plus cher qu'une Pi (120$) mais bien plus à l'aise niveau perfs (quad core, 1 ou 2 GB de RAM, des GPIO a foison, 2 USB, 1 Ethernet etc...) attaquable directement en c/c++ et avec une couche de Qt par dessus çà envoie tout plein de choses bien!
« Last Edit: 19 September, 2014, 22:48:51 by zanrek »

Offline ɯɐʇ

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 1 997
  • Bonus Pute: 113
  • ?x???? ¡¡¡¡¡
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #7 on: 21 September, 2014, 22:50:23 »
Première chose que j'ai envie de reproduire : les routes en pseudo 3D des jeux de bagnole style OutRun. La page la plus intéressante que j'ai choppé est http://www.extentofthejam.com/pseudo/ . A vous les studios !

j'avais fait ça il y a une douzaine d'années sous flash (un jeu de ski), la première question qu'on doit te poser si tu veux une piste pour ton code c'est : quel est ton langage ??

à mon sens, si tu veux faire du retro-coding, faut essayer de retrouver l'essence de ces prods, donc pas mal d'imagination et d'astuces... pas partir sur de la flat 3D mais vraiment sur de la manip de sprites...

pour le coup ces parallaxes en flash (AS2 je crois à l'époque ?) ça se faisait super facilement car flash sait très bien manipuler tes sprites :

tu génères 2 tableaux avec tes valeurs de dénivelé et de direction.
tu généres 2 clips (2 sprites) pour ton impression de profondeur. ces deux clips sont les mêmes sauf les couleurs (c'est ça qui crée l'alternance)
ensuite, et c'est là la force de flash, tu manipule tes clips directement, tu les colle, l'un sur l'autre, en réduisant le second pour qu'il arrive dans le prolongement du premier, c'est ça qui va donner ton impression de profondeur.
tu relève sa taille, ça te donne ton coefficient de réduction d'un clip à l'autre.
tu rends tout ça proportionnel à ta vitesse et ta position, en clippant tout ce qui est derrière toi et tout ce qui est trop loin devant, là tu as déjà une piste droite qui scolle.
tu paramètres également ton décalage droite / gauche (la position de ta voiture) sur le milieu de tes sprites et tu te déplaces sur ta route.

2ème boulot, les virages, là c'est assez simple tu reprends tes clips, et tu les décales le seconde de "1 unité" vers la droite (le milieu restant ton origine) ensuite tu "skew" ton second clip (je sais pas comment dire en français... translation ? c'est une fonction en hard dans flash qui tord ton clip "en losange") tu le skew donc pour que le bas de ton clip recolle avec le haut du premier, tu relève ta valeur de déformation ... que tu appliqueras à chaque clip selon les valeurs de ton tableau.

pour la dernière manip, la gestion de la hauteur, c'était encore plus simple, une simple réduction de la taille en Y du clip...

après pour chaque frame il suffit de te repositionner à ton plan en cours. et de dessiner tous ceux qui sont devant en tenant compte du décalage déjà appliqué d'un plan à l'autre (décalage plan N = décalage N-1 + décalage N-2 + ... + valeur globale de ta position X).


à peu près n'importe quel langage "de jeu" peu faire de la manip de sprites, mais pas forcément la déformation oblique, dans ce cas tu peux (pour pas te prendre la tête) générer une dizaine de sprites pour autant d'angles possibles de la route à droite (et tu les flippes quand le virage est à gauche).
« Last Edit: 21 September, 2014, 22:52:42 by tam »

Offline Bast

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 1 589
  • Bonus Pute: 70
  • Alors, si t'en casses 4, ça va faire une omelette!
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #8 on: 23 September, 2014, 22:19:07 »
Voilà le genre de réponse que j'attendais, je savais que tu serais au rendez-vous Tam.

Donc comme à mon accoutumée je m'y prends en dépit du bon sens. J'ai choisi Python comme langage, c'est libre, en pleine évolution et y'a masse de librairies.
Devant la difficulté à coder le bouzin vraiment à l'ancienne, vu que c'est pas un casse-briques ou un truc du genre, j'ai choisi une librairie qui gère bien les trucs pour le jeu, à savoir Pygame. C'est en gros SDL pour les pratiquants de C/C++.

Et ben c'est pas mal, ça colle à l'esprit de Flash, en qq dizaines de minutes j'ai une fenêtre, un fond et une voiture qui bouge de gauche à droite. Le tout bien moche oeuf corse. Là je vais voir si je peux faire un beau scrolling parallaxe pour le fond, après quoi je m'attaquerai au problème de taillage de route évoqué par Tam...

EDITH : bon pouf, en gros quand ma tuture bouge de gauche à droite (+10pix), j'introduis un offset pour dessiner les trois morceaux horizontaux de mon paysage fait sous Paint en 2 min (-1, puis -2, puis -3 pixels) et roule ma poule ! Trop marrant à faire ! Maintenant je pense à Space Harrier et à son scrolling bizarre, mélange de parallaxe et changement de hauteur..
« Last Edit: 23 September, 2014, 22:56:48 by Bast »

Offline ɯɐʇ

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 1 997
  • Bonus Pute: 113
  • ?x???? ¡¡¡¡¡
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #9 on: 24 September, 2014, 11:16:37 »
quel drôle de choix que python... tu as une idée précise du support sur lequel tu souhaites publier ?

j'aime bien ce qui permet d'accéder un peu à la mémoire, un truc un peu plus bas niveau quoi, surtout si tu veux faire du retro-coding... sans forcément partir sur de l'assembleur (j'ai des collègues qui font ça, assembleur CPC ou ST... faut aimer se faire mal) t'as des trucs un peu plus adapté.

t'as essayé les libs C ouvertes pour consoles ? tu peux faire des trucs sympas ET avoir un rendu sur matériel d'origine (craqué), ça c'est vraiment cool.
même XNA j'avais bien aimé même si microsoft a laissé tombé le bouzin et qu'il faut un compte dev pour pouvoir le transférer sur ta bécane.

tiens de ce que j'ai utilisé (c'est tout sur une base de C) :
GP32 (libs fournies) : super basiques et vraiment pas optimisé, mais c'est cool de refaire des choses bien basiques
DS (j'avais utilisé les libs de yaronet) : libs buggées à l'époque, mais tu peux déjà sortir des trucs rapidement, gère évidemment tout ce qui est jeu (tiles, 3D...) mais aussi tout ce qui est spécifique (stylet, son, reconnaissance écriture, ...) tu peux simplement faire des trucs assez performants (shmup...)
GBA : assez peu utilisé j'avais eu de bons retours, me souviens plus du nom de la lib
PSP : un peu chiant à mettre en place niveau environnement de dev, après c'est du billard
360 (XNA) : franchement sympa, ça m'a permis de me plonger dans des trucs vraiment cools (shaders...)

Offline Bast

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 1 589
  • Bonus Pute: 70
  • Alors, si t'en casses 4, ça va faire une omelette!
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #10 on: 24 September, 2014, 17:11:08 »
ha mais on est bien d'accord : python c'est parce que je l'enseigne un peu et que c'est pas mal, il y aurait a priori des outils pour recompiler vers du C et je ne désespère pas de redescendre au niveau machine un jour..

.. merde t'as bien fait du flash !  ;D

Offline ɯɐʇ

  • Snack of Quality
  • Hero Member
  • *****
  • Posts: 1 997
  • Bonus Pute: 113
  • ?x???? ¡¡¡¡¡
Re: [Programmation] ou comment créer des jeux à l'ancienne !
« Reply #11 on: 24 September, 2014, 20:15:35 »
je plaide coupable  ;D

mais pour info, tu peux même faire du C en flash, et pas qu'avec des trucs exotiques genre lib C qui compile du flash, tu peux coder des shaders que tu utilises dans flash, j'avais testouillé le truc c'est marrant ça s'appelle pixel bender.

perso quand je commence à manipuler du pixel en C++ / GLSL, je me dis que je suis déjà raisonnablement "bas niveau".
hop, perché.
« Last Edit: 24 September, 2014, 20:17:57 by tam »