Clause de non-responsabilité
Voici un article sur la façon dont mes amis et moi avons écrit le jeu. Nous l'avons ajouté et vendu, mais cela ne nous rapporte pas d'argent. Cependant, c'était très intéressant et amusant pour nous de le faire, et j'ai décidé de partager mes souvenirs. Il y aura un minimum de détails techniques dans l'article, je ne posterai pas le code, car en tirer des enseignements est inutile. Il s'agit d'un code de fans, pas de professionnels, il y a une erreur sur une erreur. Aucun de nous n'a de formation en informatique et personne n'a jamais été engagé professionnellement dans la programmation. Parfois, je posterai des détails techniques, car sans cela, nulle part. Je demande également aux lecteurs de ne pas publier de commentaires sur ce que nous sommes des drageons, car c'est insultant à lire. Bien que vrai.
Autres parties de l'article2e partie3e partieChapitre 1. Événements préhistoriques
Beaucoup de temps s'est écoulé et je ne me souviens pas trop bien des détails, mais je me souviens certainement que je suis rentré plus tard que d'habitude et j'étais plutôt fatigué quand j'ai vu l'appel de Fyodor Mikhalych. Manqué.
Je te rappelle demain, pensais-je.
Fedor Mikhalych a toujours été au cœur de notre projet. Et c'était comme un cerveau, cependant, ce n'était pas entièrement vrai non plus. J'étais des mains, je suppose. Assurément, j'étais plutôt un back office. Et Fedor Mikhalych - l'avant. Par conséquent, il a toujours jailli d'idées. Et j'ai toujours brutalement coupé le vol de ses pensées:
- Fedor Mikhalych, c'est impossible, pour cela il faudra tout refaire dans le moteur, et changer la moitié des essets. Et cela sans mentionner le fait que l'idée elle-même est idiote, je ne l'aime pas - alors je répondrai alors aux appels de Fyodor Mikhalych, de sorte que dans quelques semaines, je traduirai ses idées en code, l'appellera et dirai que j'ai trouvé et écrit Krutetskaya chose ... Mais ce sera plus tard.
Avant cela, il restait encore environ un an. En attendant, nous pensions avoir écrit des MMORPG.
MMORPG, nous avons commencé à écrire soudainement. Ni moi, ni Fyodor Mikhalych, ni Dimon, n'avons jamais été impliqués professionnellement dans la programmation, sans parler du développement de jeux. Nous avons tous travaillé à la banque, Dimon négociait en devises, je - en dette, et Fedor Mikhalych s'occupait du soutien commercial. De plus, Dimon et Fedor Mikhalych travaillaient dans une banque et moi dans une autre. Mais nous étions des joueurs. Nous voulions écrire des jeux. J'ai "barboté" dans la programmation de l'école, il était une fois avec l'aide du livre d'Andre Lamot "Programming Windows Games", écrit un clone Wolfenstein du jeu en C, écrit clairement à partir du livre, mais mon compilateur ne savait pas comment intégrer l'assembleur dans le code C, par conséquent, contrairement à la version livre, mon moteur fonctionnait très lentement. Ensuite, je n'ai pas fait de programmation du tout pendant longtemps, jusqu'à ce qu'une fois, dans une librairie, mes yeux tombent sur le livre "Programmation de jeux 3D pour Windows" d'André Lamot.
Deja Vu, je pensais en français. Comme je travaillais dans une banque française, je devais parfois le faire.
Mais c'était un livre complètement différent. Je l'ai feuilleté et j'ai réalisé que c'est ce dont nous avons besoin. Je la voulais. Je voulais faire ce qu'il disait. J'ai appelé Fedor Mikhalych et je l'ai invité à écrire un jeu 3D. Et il a accepté.
Ma femme a préparé un dîner très savoureux, mais j'étais très fatiguée et j'ai pris mon assiette en silence. Je pensais pourquoi le code ne se compile pas. C'était l'été et c'était ennuyeux au travail. J'ai même manqué un ordinateur portable avec moi pour jouer pendant mon temps libre. En été, il n'y a personne sur le marché et il y a beaucoup de temps libre au travail. Et le code n'a pas été collecté car les variables globales en moi ont été déclarées dans le fichier .h, et il a été inclus dans plusieurs fichiers .c. Et le compilateur a juré de redéfinition.
#ifndef file_h #define file_h
Viendra plus tard. En attendant, j'ai inventé mon vélo. J'en ai inventé beaucoup. Après avoir lu le livre Lamp, il me semblait que je pouvais tout faire. J'ai commencé à étudier OpenGL et il s'est avéré qu'en général, je n'avais même pas besoin d'écrire quoi que ce soit (c'était un pipeline fixe, oui. J'apprendrai beaucoup sur le fonctionnement des shaders et ce que j'ai besoin d'écrire). J'ai rapidement empilé un marcheur maladroit à la surface dans le monde 2D du point de vue de la première personne (le monde est visible en 3D, mais le moteur ne savait pas comment gérer les mouvements en hauteur, c'est-à-dire que tout était en 2D, comme dans Wolf). Il y avait une analyse détaillée des md2 et obj fomats dans le livre, et j'ai tiré le modelek de 2nd Quake et d'Internet. Tout allait bien, mais en raison d'erreurs comme celle ci-dessus, le code pourrait soudainement s'arrêter de compiler après des modifications mineures. Et il ne pouvait pas s'arrêter. J'en étais souvent perplexe à l'époque, et j'inventais souvent des vélos.
Et oui, j'ai écrit le moteur de notre MMORPG. Et Fedor Mikhalych et Dimon étaient responsables de presque tout le reste. Je me sentais comme John Carmack. Je me sentais bien. Mais les progrès ont été lents. Et Fedor Mikhalych a constamment appelé. Le voici maintenant. Il aurait dû rappeler.
J'ai remercié ma femme pour le dîner et je me suis versé du vin. Nous devons parler à Fedor Mikhalych. Ma femme m'a regardé comme un loup. À son avis, je devais lui parler. Mais le devoir est avant tout.
- Bonjour, Fedor Mikhalych, a appelé?
- Pate, laisse tomber cette merde que tu écris, on fait des ordures!
- ???, - bien sûr, j'ai mal répondu.
- Nous devons écrire des jeux pour l'iPhone. L'avenir est le jeu mobile.
Je dois dire que Fedor Mikhalych n'a pas été le premier à proposer cette idée. Appstor a grandi activement. De grands projets ont commencé à apparaître, mais il y avait beaucoup de place sur le marché. Et tout le monde voulait y aller.
- D'accord. Réfléchissons-y.
- Nehru pense. Faisons le jeu. Juste quelque chose de plus simple, pas de MMORPG, sinon nous n'ajouterons rien à la retraite. Mais nous devons déjà libérer maintenant, avant le départ du train.
- Eh bien, je veux écrire en 3D. Comment jouer à la 3D sur un iPhone?
"Oubliez ça", Fedor Mikhalych a été très persévérant. - N'écrivons pas en 3D. Pensons au genre.
- Pensez-y. D'accord, voyons ce qu'il y a. Je mets Ikscode et jette un œil. Quand j'ai acheté un macbook pour moi, j'ai vu qu'il y avait du hackcode gratuit sur le disque avec. Il semble que l'environnement soit normal.
- Génial. J'ai ajouté vos liens de messagerie vers des sites avec des tutoriels sur la programmation pour iPhone. J'ai particulièrement aimé certains Ray Wenderlich. Jetez un oeil.
- Bien.
Quelque chose comme ça, j'ai plongé dans le monde du développement mobile. Sans éducation spécialisée, sans connaissance de la POO, sans idée de ce qu'il faut développer. Et ma première pensée lorsque j'ai ouvert le site de programmation éducative pour l'iPhone était "quelle syntaxe idiote". Avec ces mots, je décris toujours l'objectif C.
Ensuite, c'était plus amusant. Il s'avère que mon habitude
GLBegin(GL_TRIANGLES)
Ils ne fonctionnaient pas sur l'iPhone. GLTranslatef etc. n'a pas fonctionné non plus. des choses stupides.
- D'accord. Ce n'est pas pour rien que j'ai lu la Lampe, je sais comment ça marche, pensais-je. Et il a écrit.
Quelque part en quelques jours, j'ai compris les objets de tableau de vertex et comment travailler avec eux dans le shader. Il m'a fallu encore une semaine pour créer un projet où vous pourriez déplacer un cube avec une texture animée sur l'écran. La plupart du temps a été consacré à dessiner une série de textures pour l'animation. Sprites. Après environ deux semaines, j'avais un petit jeu de plateforme prêt. Je l'ai nommé Agent Ivan, en l'honneur de mon futur professeur d'hébreu.

Pendant tout ce temps, Fedor Mikhalych réfléchissait intensément. Le fait est qu'à son avis, le jeu de plateforme n'avait pas de sens pour écrire. C'était primitif.
"C'est primitif", a-t-il déclaré. - Ce serait plus grave. Au fait, avez-vous entendu que vous allez rééditer un OVNI sur votre ordinateur?
- X-Com?
- Oui.
- Il est grand temps. Le jeu était cool. Soit dit en passant, il conviendrait parfaitement à l'interface tactile. Vont-ils la laisser sortir sur un iPhone?
Fedor Mikhalych réfléchit un instant.
- Allez.
Maintenant, je pensais.
- Faisons X-com? Nous n'avons aucun droit.
- Eh bien, le clone. Pas X-com lui-même. Ils sortiront sur un ordinateur, et nous serons silencieux sur un iPhone.
C'était intéressant. Nous aimions tous les deux X-com. Ensuite, il m'a semblé que la création d'un clone de X-com n'était pas difficile. Plus difficile que le jeu de plateforme, bien sûr, mais pas beaucoup. Pendant six mois devrait faire face. Si vous êtes chanceux, allons en direct sur un iPhone avant la sortie du remake sur PC. Ce sera cool. Ce sera amusant. Et, plus important encore, ce n'est pas un gros projet. Si j'ai fait un jeu de plateforme à partir de zéro en 3 semaines, alors Ikskoy est de 6 mois. On multiplie immédiatement par 2 pour ne pas se fâcher, au total - un an. Cool.
Chapitre 2. Le début des temps
Nous avons pris feu. J'ai écrit le code, Dimon a fait des textures de sol et travaillé avec des pigistes qui ont fait des modèles au format md2. Outre les soldats eux-mêmes, dont le pigiste avec qui je travaillais était responsable. Eh bien, Fedor Mikhalych pensait à la structure du jeu, à l'intrigue, aux armes, à l'architecture des niveaux, à l'équilibre, et c'est tout pour ça.
Mais, plus important encore, j'ai écrit le moteur sur OpenGL, comme je le voulais.
C'était dur au début. La plupart du temps, j'ai appris à écrire en Objective-C et OpenGL. Plus petit - a écrit le jeu lui-même. Mais au fil du temps, je me suis impliqué, et environ un mois plus tard, des monstres animés de Quake 2 dans un simulateur iPhone ont couru après mon doigt sur un champ carré texturé (nos modèles n'étaient pas encore prêts). Fedor Mikhalych a personnalisé l'histoire du jeu:
- Il y aura un avenir, mais pas loin. Le monde est dominé par les entreprises. Et les attaques ici et là, tout d'un coup, le monde entier est dans les attaques.
«Les attaques terroristes sont mauvaises», ai-je répondu.
- Eh bien, bien sûr, c'est le point. Et tu te battras avec eux.
"Se battre, c'est bien," répondis-je. - Mais ennuyeux. Ce n'est pas à vous de tirer sur les Elies.
- Et alors. Nous pouvons et sur Elien. Comme nous voulons, nous allons le faire, c'est notre jeu.
- Nous ne pouvons pas le faire par l'Elien, ce sera X-com. Et pour les gens ce n'est pas intéressant.
"Allez les animaux", Fyodor Mikhalych ne lâcha pas. Il n'aurait qu'à brûler quelqu'un.
"Pitié des animaux," répondis-je.
- Eh bien, allez, vils animaux.
- Ou peut-être qu'ils sont bons dans l'âme?
- Ici, vous pensez correctement. Mais que faire si ces animaux mignons dans l'âme sont mauvais?
- Je veux dire? - Je ne comprenais vraiment pas alors.
- Eh bien, prenez Greenpeace. Il protège, disons, les pingouins de l'extinction.
J'étais un peu surpris:
- Quand les pingouins ont-ils commencé à s'éteindre? - J'ai même grimpé sur Wikipedia. Non, tout est en ordre, ne s'éteignez pas. "Ils ne s'éteignent pas", ai-je dit à haute voix en pointant un doigt sur l'écran.
- Oui, calme-toi, - répondit Fedor Mikhalych, - ce sera nécessaire, ils commenceront à s'éteindre. Vous comprenez l'idée. Ils sont sauvés de l'extinction en créant un pingouin mutant avec une personne afin de leur donner raison, et pour qu'ils cessent de s'éteindre eux-mêmes.
"Pas d'expériences humaines", rétorquai-je.
"Exactement", Fedor Mikhalych n'a pas abandonné. Supposons que quelqu'un le renifle et qu'ils le tuent. Et a organisé une attaque terroriste. Et quelqu'un a deviné, et lui aussi a été tué, comme une attaque terroriste. Puis les accords avec les terroristes ont commencé, le commerce des armes, la traite des êtres humains, et tout cela - sous les auspices de Greenpeace, pour cacher les expériences sur les pingouins.
"Profond," dis-je.
- Eh bien, toute cette machine de tromperie terroriste gagne du terrain et une réaction auto-entretenue commence déjà, tu vois ce que je veux dire?
"Sekou", je vraiment sec. Je grince toujours.
- Génial. Il s'avère donc que vous tirez sur des gens, et qu'il y a des pingouins mutants dans le dos et c'est tout. Est-ce intéressant? - Fedor Mikhalych m'a convaincu. Cela m'a vraiment semblé intéressant.
J'ai appelé la prochaine version du projet «pinguin» et j'ai commencé à perfectionner le code. Dimon a lancé une centaine de textures différentes du sol, de l'herbe, du béton et d'autres choses. Fedor Mikhalych était également engagé dans les textures. Dans le code, j'ai généré un modèle de sol composé de carrés. Chaque carré a sa propre texture. J'ai chargé un tas de modèles en mémoire et montré à Fedor Mikhalych comment tout suit joyeusement un doigt sur l'écran. Pendant ce temps, le premier modèle de notre soldat est arrivé à temps d'un pigiste, et je l'ai ajouté à la place des monstres de Quake 2. En plusieurs exemplaires.

Mais une fois Fedor Mikhalych a dit que nous devrions voir comment tout fonctionne sur l'appareil. Et j'ai acheté un abonnement développeur. Il a fallu un certain temps pour configurer tous les certificats. Pour moi, c'était une forêt sombre, mais Fedor Mikhalych a réussi rapidement. Nous avons téléchargé le projet sur le téléphone, l'avons démarré, commencé à télécharger ... et l'application s'est bloquée.
Incompris.
J'ai lancé la construction dans l'émulateur - cela fonctionne.
Le même build sur un véritable appareil plante.
Il est temps de se tourner vers le débogueur.
Déjà à cette époque, tout était relativement bien avec le code de débogage dans l'ikskod. J'ai lancé le profileur et commencé à regarder l'application.
- D'une certaine façon, beaucoup de mémoire disparaît, Fedor Mikhalych, regarde. Nous avons 20 monstres dans un champ carré et elle a déjà mangé 150 Mo ... 200 ... 250 ... 300 ... est tombé. - J'ai pensé. - Comptons. Nous créons le sol. C'est 128x128 carrés. Chacun a 4 pics, c'est 16 mille pics. Chacun se compose de 3 coordonnées et 2 coordonnées de texture, ce sont tous des flottants. Total 82 000 flotteurs. Et chaque flottant fait 4 octets. Total 320 Ko. Un peu, hein?
"Pas grand-chose", a convenu Fedor Mikhalych.
- Ensuite, nous expédions vos textures avec Dimon. Nous en avons maintenant 20. Chaque couleur 512x512 et 32 bits. Total 1 Mo par texture, 20 Mo en sortie. Un peu, hein?
"Pas grand-chose", a convenu Fedor Mikhalych.
- Ensuite, nous chargeons des modèles de nos soldats. Je vais les expédier 20 pièces. Chacun de 2 000 polygones, chacun avec 3 sommets, chacun avec 5 flottants, chacun avec 4 octets. Total ... 2,35 Mo. Bête?
"Pas grand-chose", a convenu Fedor Mikhalych.
"Bien que non." Chaque modèle a 95 cadres. Total 220 Mo.
"Ouais", a convenu Fedor Mikhalych, "et les textures sur eux." 1024x1024 32 bits. Total 80 Mo. 300 Mo seulement. Et ce n'est qu'un champ plat et 20 monstres. Et dans le jeu, il y aura beaucoup plus d'ennemis au niveau. Et toutes sortes d'objets. Dans le simulateur, il n'y a aucune restriction sur la quantité de mémoire. Et dans l'iPhone ses 512 Mo. Le système occupe une partie, vous devez vous montrer.
J'étais dévasté. À un tel rythme, pour charger le niveau, vous devrez attendre la sortie d'un iPhone avec 5-10 Go de mémoire. Mais comment? Comment Carmack a-t-il fait Quake ???