Juego propio. Parte 1

Descargo de responsabilidad


Aquí hay un artículo sobre cómo mis amigos y yo escribimos el juego. Lo agregamos y lo vendemos, pero no nos trae dinero. Sin embargo, fue muy interesante y divertido para nosotros hacerlo, y decidí compartir mis recuerdos. Habrá un mínimo de detalles técnicos en el artículo, no publicaré el código, ya que aprender de él no tiene sentido. Este es un código de fanáticos, no profesionales, hay un error en un error. Ninguno de nosotros tiene educación en TI y nadie ha participado profesionalmente en la programación. A veces publicaré detalles técnicos, ya que sin esto, en ninguna parte. También le pido a los lectores que no publiquen comentarios sobre lo que somos tontos, ya que es insultante leerlo. Aunque cierto.

Otras partes del articulo
Parte 2
Parte 3

Capítulo 1. Eventos prehistóricos


Ha pasado mucho tiempo y no recuerdo muy bien los detalles, pero definitivamente recuerdo que llegué a casa más tarde de lo habitual y estaba bastante cansado cuando vi la llamada de Fyodor Mikhalych. Perdido

Te llamaré mañana, pensé.

Fedor Mikhalych siempre ha sido el corazón de nuestro proyecto. Y era como un cerebro, sin embargo, esto tampoco era del todo cierto. Yo era manos, supongo. Seguramente, era más bien una oficina administrativa. Y Fedor Mikhalych - el frente. Por lo tanto, siempre brotaba de ideas. Y siempre corté groseramente el vuelo de sus pensamientos:

- Fedor Mikhalych, esto es imposible, para esto será necesario rehacer todo en el motor y cambiar la mitad de los conjuntos. Y esto sin mencionar que la idea en sí es idiota, no me gusta, así que responderé a las llamadas de Fyodor Mikhalych, de modo que en unas semanas traduciré sus ideas al código, lo llamaré y le diré que se me ocurrió y escribí Krutetskaya. cosa ... Pero será más tarde.

Antes de eso, todavía había alrededor de un año. Mientras tanto, pensamos que escribimos MMORPG.

MMORPG comenzamos a escribir de alguna manera de repente. Ni yo, ni Fyodor Mikhalych, ni Dimon, hemos participado profesionalmente en la programación, y mucho menos en el desarrollo de juegos. Todos trabajamos en el banco, Dimon comerciaba con divisas, yo con deudas y Fedor Mikhalych participaba en el soporte comercial. Además, Dimon y Fedor Mikhalych trabajaban en un banco y yo en otro. Pero éramos jugadores. Queríamos escribir juegos. "Incursioné" en la programación de la escuela, una vez, con la ayuda del libro de Andre Lamot "Programming Windows Games", escribí un clon de Wolfenstein del juego en C, escribí claramente desde el libro, pero mi compilador no sabía cómo integrar el ensamblador en el código C, por lo tanto, a diferencia de la versión del libro, mi motor funcionaba muy lentamente. Luego no hice programación durante mucho tiempo, hasta que, una vez, en una librería, me quedé mirando el libro "Programación de juegos 3D para Windows" de Andre Lamot.

Deja Vu, pensé en francés. Como trabajaba en un banco francés, a veces tenía que hacer esto.

Pero era un libro completamente diferente. Lo hojeé y me di cuenta de que esto es lo que necesitamos. Yo la quería a ella. Quería hacer lo que decía. Llamé a Fedor Mikhalych y lo invité a escribir un juego en 3D. Y él estuvo de acuerdo.

Mi esposa preparó una cena muy sabrosa, pero yo estaba muy cansada y silenciosamente recogí mi plato. Estaba pensando por qué el código no se está compilando. Era verano y era aburrido en el trabajo. Incluso me perdí una computadora portátil para jugar en mi tiempo libre. En el verano, no hay nadie en el mercado, y hay mucho tiempo libre en el trabajo. Y el código no se recopiló porque las variables globales en mí se declararon en el archivo .h, y se incluyó en varios archivos .c. Y el compilador juró la redefinición.

#ifndef file_h #define file_h 

Vendrá después. Mientras tanto, inventé mi bicicleta. Yo inventé muchos de ellos. Después de leer el libro Lámpara, me pareció que podía hacer cualquier cosa. Comencé a estudiar OpenGL y resultó que, en general, ni siquiera necesitaba escribir nada (era una tubería fija, sí. Más adelante descubriré cómo funcionan los sombreadores y qué necesito escribir). Rápidamente apilé un torpe andador en la superficie del mundo 2D desde la perspectiva de la primera persona (el mundo es visible en 3D, pero el motor no sabía cómo manejar los movimientos en altura, es decir, todo era 2D, como en Wolf). Hubo un análisis detallado de md2 y obj fomats en el libro, y saqué el modelek de 2nd Quake y de Internet. Todo estuvo bien, pero debido a errores como el anterior, el código podría dejar de compilarse repentinamente después de cambios menores. Y no pudo parar. A menudo me preguntaba sobre eso en ese momento, y a menudo inventaba bicicletas.

Y sí, escribí el motor para nuestro MMORPG. Y Fedor Mikhalych y Dimon fueron responsables de casi todo lo demás. Me sentí como John Carmack. Me sentí bien Pero el progreso fue lento. Y Fedor Mikhalych llamaba constantemente. Aquí está ahora. Debería haber llamado de nuevo.

Le di las gracias a mi esposa por la cena y me serví un poco de vino. Necesitamos hablar con Fedor Mikhalych. Mi esposa me miró como un lobo. En su opinión, tuve que hablar con ella. Pero el deber está por encima de todo.

- Hola, llamó Fedor Mikhalych?
- Paté, tira esta basura que escribes, ¡hacemos basura!
- ???, - por supuesto, respondí mal.
- Necesitamos escribir juegos para el iPhone. El futuro son los juegos móviles.

Debo decir que Fedor Mikhalych no fue el primero en tener esta idea. Appstor creció activamente. Grandes proyectos comenzaron a aparecer, pero había mucho lugar en el mercado. Y todos querían ir allí.

- De acuerdo. Pensemos en ello.
- Piensa Nehru. Hagamos el juego Simplemente algo más simple, no MMORPG, de lo contrario no agregaremos nada a la jubilación. Pero ya debemos soltar ahora, antes de que salga el tren.
- Bueno, quiero escribir en 3D. ¿Cómo jugar 3D en un iPhone?
"Olvídalo", Fedor Mikhalych fue muy persistente. - No escribamos en 3D. Pensemos en el género.
- Piensa en eso. Bien, veamos qué hay allí. Puse Ikscode y eché un vistazo. Cuando compré un macbook para mí, vi que había un código de pirateo gratuito en el disco. Parece que el ambiente es normal.
- Genial Puse en su correo enlaces a sitios con tutoriales sobre programación para iPhone. Me gustó especialmente un poco Ray Wenderlich. Echa un vistazo
- bien.

Algo así me sumergí en el mundo del desarrollo móvil. Sin educación especializada, sin conocimiento de OOP, sin una idea de qué desarrollar. Y mi primer pensamiento cuando abrí el sitio de programación educativa para el iPhone fue "qué sintaxis idiota". Con estas palabras, sigo describiendo el Objetivo C.

Entonces fue más divertido. Resulta mi habitual

 GLBegin(GL_TRIANGLES); GLVertex3f(…); GLend(); 

No funcionaban en el iPhone. GLTranslatef, etc. tampoco funcionó. estupideces

- De acuerdo. No es por nada que leí la lámpara; sé cómo funciona, pensé. Y él escribió.

En algún lugar en un par de días descubrí los objetos de matriz de vértices y cómo trabajar con ellos en el sombreador. Me tomó otra semana crear un proyecto donde pudieras mover un cubo con una textura animada por la pantalla. La mayor parte del tiempo se dedicó a dibujar una serie de texturas para la animación. Sprites Después de aproximadamente dos semanas tenía un pequeño juego de plataformas listo. Lo llamé Agente Ivan, en honor a mi futuro maestro de hebreo.



Todo este tiempo Fedor Mikhalych estaba pensando intensamente. El hecho es que, en su opinión, el juego de plataformas no tenía sentido para escribir. Fue primitivo.

"Esto es primitivo", dijo. - Eso sería más serio. Por cierto, ¿escuchaste que vas a volver a emitir ovnis en tu computadora?
- X-Com?
- si.
- Ya es hora. Genial juego fue. Por cierto, encajaría perfectamente en la interfaz táctil. ¿La dejarán salir en un iPhone?

Fedor Mikhalych pensó por un momento.

- Vamos

Ahora que pensaba.

- ¿Haremos X-com? No tenemos derechos
- Bueno, el clon. No X-com en sí. Se lanzarán en una computadora, y estaremos callados en un iPhone.

Eso fue interesante. A los dos nos gustó mucho X-com. Entonces me pareció que crear un clon de X-com no era difícil. Más difícil que el juego de plataformas, por supuesto, pero no mucho. Durante seis meses debe hacer frente. Si tienes suerte, vámonos en vivo en un iPhone antes de que salga el remake en la PC. Será genial Sera divertido Y, lo más importante, este no es un gran proyecto. Si hice un juego de plataformas desde cero en 3 semanas, entonces Ikskoy tiene 6 meses. Multiplicamos inmediatamente por 2 para no enojarnos, en total, un año. Genial

Capítulo 2. El comienzo de los tiempos


Nos prendimos fuego. Escribí el código, Dimon hizo texturas de piso y trabajó con freelancers que hicieron modelos en formato md2. Además de los propios soldados, de quienes fue responsable el profesional independiente con el que trabajé. Bueno, Fedor Mikhalych estaba pensando en la estructura del juego, la trama, las armas, la arquitectura de los niveles, el equilibrio, y eso es todo por eso.

Pero, lo más importante, escribí el motor en OpenGL, como quería.

Fue difícil al principio. La mayoría de las veces aprendí a escribir en Objective-C y OpenGL. Más pequeño: escribió el juego en sí. Pero con el tiempo, me involucré, y aproximadamente un mes después, los monstruos animados de Quake 2 en un simulador de iPhone corrieron detrás de mi dedo por un campo de textura cuadrada (nuestros modelos aún no estaban listos). Fedor Mikhalych personalizó la historia del juego:

- Habrá un futuro, pero no muy lejos. El mundo está dominado por las corporaciones. Y los ataques aquí y allá, de repente, todo el mundo está en los ataques.
"Los ataques terroristas son malos", respondí.
- Bueno, por supuesto, ese es el punto. Y pelearás con ellos.
"Pelear es bueno", respondí. - Pero aburrido. Esto no es para ti disparar a los Elies.
- Y qué? Podemos y sobre Elien. Como queramos, lo haremos, este es nuestro juego.
- No podemos hacerlo por el Elien, será X-com. Y para la gente no es interesante.
"Vamos animales", Fiódor Mikhalych no se rindió. Solo tendría que quemar a alguien.
"Lástima los animales", respondí.
- Bueno, vamos animales viles.
- ¿O tal vez son buenos en el alma?
- Aquí, piensas correctamente. Pero, ¿y si estos lindos animales en el alma son malvados?
- Quiero decir? - Realmente no entendí entonces.
- Bueno, toma Greenpeace. Protege, digamos, los pingüinos, de la extinción.

Estaba un poco desconcertado:

- ¿Cuándo comenzaron a desaparecer los pingüinos? - Incluso me subí a Wikipedia. No, todo está en orden, no se extinga. "No se extinguen", dije en voz alta y metí un dedo en la pantalla.
- Sí, cálmate, - respondió Fedor Mikhalych, - será necesario, comenzarán a extinguirse. Entiendes la idea. Se salvan de la extinción al crear un pingüino mutante con una persona para agregarle razón, y para que dejen de extinguirse.
"No hay experimentos en humanos", respondí.
"Exactamente", Fedor Mikhalych no se rindió. Supongamos que alguien lo olisqueó y lo mataron. Y organizó un ataque terrorista. Y alguien lo adivinó, y él también fue asesinado, como un ataque terrorista. Luego comenzaron los acuerdos con los terroristas, el comercio de armas, el tráfico de personas y todo esto, bajo los auspicios de Greenpeace para ocultar los experimentos con los pingüinos.
"Profundo", dije.
- Bueno, toda esta máquina de engaño terrorista está ganando impulso y una reacción autosostenida ya está comenzando, ¿sabes a qué me refiero?
"Sekou", realmente sec. Todavía estoy chillando.
- Genial Resulta que disparas a las personas, y hay pingüinos mutantes en la parte posterior y eso es todo. ¿Esto es interesante? - Fedor Mikhalych me convenció. Realmente me pareció interesante.

Llamé a la próxima versión del proyecto "pinguin" y me puse a perfeccionar el código. Dimon arrojó unas cien texturas diferentes del suelo, el césped, el hormigón y otras cosas. Fedor Mikhalych también se dedicaba a las texturas. En el código, generé un modelo de piso que consiste en cuadrados. Cada cuadrado tiene su propia textura. Cargué un montón de modelos en la memoria y le mostré a Fedor Mikhalych cómo todo sigue alegremente un dedo por la pantalla. Mientras tanto, el primer modelo de nuestro soldado llegó a tiempo de un profesional independiente, y lo agregué en lugar de los monstruos del Quake 2. En varias copias.



Pero una vez, Fedor Mikhalych dijo que deberíamos ver cómo funciona todo en el dispositivo. Y compré una suscripción de desarrollador. Tomó algún tiempo configurar todos los certificados. Para mí era un bosque oscuro, pero Fedor Mikhalych se las arregló rápidamente. Subimos el proyecto al teléfono, lo iniciamos, comenzamos a descargar ... y la aplicación se bloqueó.

Malentendido

Lancé la compilación en el emulador, funciona.

La misma compilación en un dispositivo real se bloquea.

Es hora de recurrir al depurador.

Ya en ese momento, todo era relativamente bueno con el código de depuración en el ikskod. Lancé el generador de perfiles y comencé a mirar la aplicación.

- De alguna manera se va una gran cantidad de memoria, Fedor Mikhalych, mira. Tenemos 20 monstruos en un campo cuadrado y ella ya ha comido 150 MB ... 200 ... 250 ... 300 ... cayó. - pensé - Vamos a contar. Creamos el piso. Tiene 128x128 cuadrados. Cada uno tiene 4 picos, esto es 16 mil picos. Cada uno consta de 3 coordenadas y 2 coordenadas de textura, todas son flotantes. Total 82 mil carrozas. Y cada flotador es de 4 bytes. Total 320 Kb. Un poco, ¿eh?
"No mucho", coincidió Fedor Mikhalych.
- A continuación, enviamos tus texturas con Dimon. Ahora tenemos 20 de ellos. Cada color de 512x512 y 32 bits. Total 1 MB por textura, 20 MB de salida. Un poco, ¿eh?
"No mucho", coincidió Fedor Mikhalych.
- A continuación, cargamos modelos de nuestros soldados. Les enviaré 20 piezas. Cada uno de 2 mil polígonos, cada uno con 3 vértices, cada uno con 5 flotadores, cada uno con 4 bytes. Total ... 2,35 MB. Tonto?
"No mucho", coincidió Fedor Mikhalych.
"Aunque no". Cada modelo tiene 95 cuadros. Total 220 MB.
"Sí", coincidió Fedor Mikhalych, "y las texturas en ellos". 1024x1024 32 bit. Total 80 MB. Solo 300 MB de salida. Y esto es solo un campo plano y 20 monstruos. Y en el juego habrá muchos más enemigos en el nivel. Y todo tipo de objetos. En el simulador, no hay restricciones en la cantidad de memoria. Y en el iPhone sus 512 MB. El sistema ocupa parte, hay que presumir.

Estaba devastada A este ritmo, para cargar el nivel, tendrá que esperar el lanzamiento de un iPhone con 5-10 GB de memoria. Pero como? ¿Cómo hizo Carmack Quake?

Source: https://habr.com/ru/post/es409825/


All Articles