Eigenes Spiel. Teil 1

Haftungsausschluss


Hier ist ein Artikel darüber, wie meine Freunde und ich das Spiel geschrieben haben. Wir haben es hinzugefügt und verkauft, aber es bringt uns kein Geld. Es war jedoch sehr interessant und hat uns Spaß gemacht, und ich beschloss, meine Erinnerungen zu teilen. Der Artikel enthält nur ein Minimum an technischen Details. Ich werde den Code nicht veröffentlichen, da es sinnlos ist, daraus zu lernen. Dies ist ein Code von Fans, nicht von Profis, es gibt einen Fehler bei einem Fehler. Keiner von uns hat eine IT-Ausbildung und niemand war jemals professionell mit Programmieren beschäftigt. Manchmal werde ich technische Details posten, da ohne diese nirgendwo. Ich bitte die Leser auch, keine Kommentare darüber zu veröffentlichen, was wir Trottel sind, da es beleidigend ist, zu lesen. Obwohl wahr.

Andere Teile des Artikels
Teil 2
Teil 3

Kapitel 1. Prähistorische Ereignisse


Es ist viel Zeit vergangen und ich erinnere mich nicht gut an die feinen Details, aber ich erinnere mich definitiv daran, dass ich später als gewöhnlich nach Hause kam und ziemlich müde war, als ich Fjodor Mikhalychs Anruf sah. Vermisst.

Ich rufe dich morgen zurück, dachte ich.

Fedor Mikhalych war schon immer das Herzstück unseres Projekts. Und es war wie ein Gehirn, aber das stimmte auch nicht ganz. Ich war Hände, denke ich. Sicher war ich eher ein Backoffice. Und Fedor Mikhalych - die Front. Deshalb schwärmte er immer von Ideen. Und ich habe seine Gedanken immer grob abgeschnitten:

- Fedor Mikhalych, das ist unmöglich, dafür wird es notwendig sein, alles im Motor zu wiederholen und die Hälfte der Essets zu ändern. Und das ist nicht zu erwähnen, dass die Idee selbst idiotisch ist, ich mag sie nicht - also werde ich dann die Anrufe von Fjodor Mikhalych beantworten, so dass ich in ein paar Wochen seine Ideen in Code übersetzen, ihn anrufen und sagen werde, dass ich Krutetskaya erfunden und geschrieben habe Sache ... Aber es wird später sein.

Davor gab es noch etwa ein Jahr. In der Zwischenzeit dachten wir, wir hätten MMORPGs geschrieben.

MMORPG haben wir irgendwie plötzlich angefangen zu schreiben. Weder ich noch Fyodor Mikhalych oder Dimon waren jemals professionell in die Programmierung involviert, geschweige denn in die Entwicklung von Spielen. Wir haben alle bei der Bank gearbeitet, Dimon hat mit Währungen gehandelt, I - mit Schulden, und Fedor Mikhalych hat Handelsunterstützung geleistet. Außerdem arbeiteten Dimon und Fedor Mikhalych in einer Bank und ich in einer anderen. Aber wir waren Gamer. Wir wollten Spiele schreiben. Ich habe mich in der Programmierung von der Schule "versucht", es war einmal, als ich mit Hilfe von Andre Lamots Buch "Programming Windows Games" einen Wolfenstein-Klon des Spiels in C schrieb, klar aus dem Buch schrieb, aber mein Compiler wusste nicht, wie man Assembler in C-Code einbettet. Daher arbeitete mein Motor im Gegensatz zur Buchversion sehr langsam. Dann habe ich lange Zeit überhaupt nicht programmiert, bis ich einmal in einem Buchladen auf das Buch "Programmieren von 3D-Spielen für Windows" von Andre Lamot fiel.

Deja Vu, dachte ich auf Französisch. Da ich in einer französischen Bank arbeitete, musste ich das manchmal tun.

Aber es war ein ganz anderes Buch. Ich blätterte durch und erkannte, dass wir das brauchen. Ich wollte sie. Ich wollte tun, was es sagte. Ich rief Fedor Mikhalych an und lud ihn ein, ein 3D-Spiel zu schreiben. Und er stimmte zu.

Meine Frau kochte ein sehr leckeres Abendessen, aber ich war sehr müde und nahm schweigend meinen Teller. Ich habe darüber nachgedacht, warum der Code nicht kompiliert wird. Es war Sommer und es war langweilig bei der Arbeit. Ich habe sogar einen Laptop verpasst, um in meiner Freizeit zu spielen. Im Sommer ist niemand auf dem Markt und es gibt viel Freizeit bei der Arbeit. Und der Code wurde nicht gesammelt, weil die globalen Variablen in mir in der .h-Datei deklariert waren und in mehreren .c-Dateien enthalten waren. Und der Compiler schwor bei der Neudefinition.

#ifndef file_h #define file_h 

Wird später kommen. In der Zwischenzeit habe ich mein Fahrrad erfunden. Ich habe viele davon erfunden. Nachdem ich das Buch Lampe gelesen hatte, schien es mir, dass ich alles tun kann. Ich habe angefangen, OpenGL zu studieren, und es stellte sich heraus, dass ich im Allgemeinen nicht einmal etwas schreiben musste (es war eine feste Pipeline, ja. Ich werde viel darüber lernen, wie Shader funktionieren und was ich schreiben muss). Aus der Perspektive der ersten Person stapelte ich schnell einen ungeschickten Walker auf der Oberfläche in der 2D-Welt (die Welt ist in 3D sichtbar, aber der Motor wusste nicht, wie man mit Höhenbewegungen umgeht, das heißt, alles war 2D, wie in Wolf). Das Buch enthielt eine detaillierte Analyse von md2 und obj fomats, und ich zog den modelek aus dem 2. Beben und aus dem Internet. Alles war in Ordnung, aber aufgrund von Fehlern wie dem oben beschriebenen kann der Code nach geringfügigen Änderungen plötzlich nicht mehr kompiliert werden. Und er konnte nicht aufhören. Ich habe damals oft darüber gerätselt und oft Fahrräder erfunden.

Und ja, ich habe den Motor für unser MMORPG geschrieben. Und Fedor Mikhalych und Dimon waren für fast alles andere verantwortlich. Ich fühlte mich wie John Carmack. Ich fühlte mich gut Aber der Fortschritt war langsam. Und Fedor Mikhalych rief ständig an. Hier ist es jetzt. Er hätte zurückrufen sollen.

Ich dankte meiner Frau für das Abendessen und schenkte mir Wein ein. Wir müssen mit Fedor Mikhalych sprechen. Meine Frau sah mich als Wolf an. Ihrer Meinung nach musste ich mit ihr sprechen. Aber Pflicht ist vor allem.

- Hallo, Fedor Mikhalych, angerufen?
- Pate, lass diesen Mist fallen, den du schreibst, wir machen Müll!
- ???, - natürlich habe ich falsch geantwortet.
- Wir müssen Spiele für das iPhone schreiben. Die Zukunft ist mobiles Spielen.

Ich muss sagen, Fedor Mikhalych war nicht der erste, der auf diese Idee kam. Appstor wuchs aktiv. Es entstanden große Projekte, aber es gab viel Platz auf dem Markt. Und alle wollten dorthin gehen.

- Okay. Lass uns darüber nachdenken.
- Nehru denke nach. Lass uns das Spiel machen. Nur etwas Einfacheres, kein MMORPG, sonst werden wir dem Ruhestand nichts hinzufügen. Aber wir müssen jetzt schon loslassen, bevor der Zug abfährt.
- Nun, ich möchte in 3D schreiben. Wie spiele ich 3D auf einem iPhone?
"Vergiss es", war Fedor Mikhalych sehr hartnäckig. - Lass uns nicht 3D schreiben. Denken wir über das Genre nach.
- Denk darüber nach. Okay, mal sehen, was da ist. Ich setze Ikscode und schaue es mir an. Als ich mir ein MacBook gekauft habe, habe ich gesehen, dass es freien Hackcode auf der Festplatte gibt. Es scheint, dass die Umgebung normal ist.
- Großartig. Ich habe Ihre E-Mail-Links zu Websites mit Tutorials zur Programmierung für das iPhone eingefügt. Ich mochte besonders Ray Wenderlich. Schau mal rein.
- Gut.

So etwas tauchte ich in die Welt der mobilen Entwicklung ein. Ohne spezielle Ausbildung, ohne Kenntnis der OOP, ohne eine Vorstellung davon, was zu entwickeln ist. Und mein erster Gedanke, als ich die Website für Bildungsprogramme für das iPhone öffnete, war "was für eine idiotische Syntax". Mit diesen Worten beschreibe ich immer noch Ziel C.

Dann hat es mehr Spaß gemacht. Es stellt sich heraus, meine Gewohnheit

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

Sie haben auf dem iPhone nicht funktioniert. GLTranslatef etc. hat auch nicht funktioniert. dumme Sachen.

- Okay. Nicht umsonst lese ich die Lampe, ich weiß, wie es funktioniert, dachte ich. Und er schrieb.

Irgendwann in ein paar Tagen habe ich herausgefunden, wie man Vertex-Array-Objekte verwendet und wie man mit ihnen im Shader arbeitet. Ich habe eine weitere Woche gebraucht, um ein Projekt zu erstellen, bei dem Sie einen Würfel mit einer animierten Textur über den Bildschirm bewegen können. Die meiste Zeit wurde damit verbracht, eine Reihe von Texturen für Animationen zu zeichnen. Sprites. Nach ungefähr zwei Wochen hatte ich einen kleinen Plattformer fertig. Ich nannte ihn Agent Ivan zu Ehren meines zukünftigen Hebräischlehrers.



Fedor Mikhalych dachte die ganze Zeit intensiv nach. Tatsache ist, dass der Plattformer seiner Meinung nach keinen Sinn machte, zu schreiben. Es war primitiv.

"Das ist primitiv", sagte er. - Das wäre ernster. Haben Sie übrigens gehört, dass Sie UFO auf Ihrem Computer neu ausgeben werden?
- X-Com?
- Ja.
- Es ist höchste Zeit. Cooles Spiel war. Übrigens würde es perfekt zur Touch-Oberfläche passen. Werden sie sie auf einem iPhone rauslassen?

Fedor Mikhalych dachte einen Moment nach.

- Komm schon.

Jetzt dachte ich.

- Lass uns X-com machen? Wir haben keine Rechte.
- Nun, der Klon. Nicht X-com selbst. Sie werden auf einem Computer veröffentlicht, und wir werden auf einem iPhone leise sein.

Das war interessant X-com hat uns beiden sehr gut gefallen. Dann schien es mir nicht schwierig, einen Klon von X-com zu erstellen. Schwieriger als der Plattformer natürlich, aber nicht viel. Für sechs Monate sollte man fertig werden. Wenn Sie Glück haben, können Sie auf einem iPhone live gehen, bevor das Remake auf dem PC veröffentlicht wird. Es wird cool sein. Wird lustig. Und vor allem ist dies kein großes Projekt. Wenn ich in 3 Wochen einen Plattformer von Grund auf neu gemacht habe, dann ist Ikskoy 6 Monate alt. Wir multiplizieren sofort mit 2, um nicht verärgert zu werden, insgesamt - ein Jahr. Cool.

Kapitel 2. Der Beginn der Zeiten


Wir haben Feuer gefangen. Ich schrieb den Code, Dimon erstellte Bodentexturen und arbeitete mit Freiberuflern zusammen, die Modelle im md2-Format herstellten. Neben den Soldaten selbst, für die der Freiberufler verantwortlich war, mit dem ich zusammengearbeitet habe. Nun, Fedor Mikhalych dachte über die Struktur des Spiels, die Handlung, die Waffen, die Architektur der Levels, das Gleichgewicht nach und das ist alles dafür.

Vor allem aber habe ich die Engine auf OpenGL geschrieben, wie ich wollte.

Anfangs war es schwer. Die meiste Zeit habe ich gelernt, in Objective-C und OpenGL zu schreiben. Kleiner - hat das Spiel selbst geschrieben. Aber im Laufe der Zeit mischte ich mich ein und ungefähr einen Monat später liefen animierte Monster aus Quake 2 in einem iPhone-Simulator hinter meinem Finger über ein quadratisches strukturiertes Feld (unsere Modelle waren noch nicht fertig). Fedor Mikhalych hat die Geschichte an das Spiel angepasst:

- Es wird eine Zukunft geben, aber nicht weit weg. Die Welt wird von Unternehmen dominiert. Und die Angriffe hier und da, plötzlich ist die ganze Welt in den Angriffen.
"Terroranschläge sind schlecht", antwortete ich.
- Nun, das ist natürlich der Punkt. Und du wirst mit ihnen kämpfen.
"Kämpfen ist gut", antwortete ich. - Aber langweilig. Dies ist nicht für Sie, um auf die Elies zu schießen.
- Na und. Wir können und auf Elien. Wie wir wollen, werden wir es tun, das ist unser Spiel.
- Wir können es nicht von den Elien machen, es wird X-com sein. Und für Leute ist es nicht interessant.
"Komm schon Tiere", ließ Fjodor Mikhalych nicht locker. Er würde nur jemanden verbrennen müssen.
"Schade um die Tiere", antwortete ich.
- Nun, komm schon auf abscheuliche Tiere.
- Oder vielleicht sind sie gut in der Seele?
- Hier denkst du richtig. Aber was ist, wenn diese niedlichen Tiere in der Seele böse sind?
- Im Sinne? - Ich habe es damals wirklich nicht verstanden.
- Nimm Greenpeace. Er schützt beispielsweise Pinguine vor dem Aussterben.

Ich war ein wenig überrascht:

- Wann begannen die Pinguine auszusterben? - Ich bin sogar in Wikipedia eingestiegen. Nein, alles ist in Ordnung, nicht aussterben. "Sie sterben nicht aus", sagte ich laut und steckte einen Finger auf den Bildschirm.
- Ja, beruhige dich, - antwortete Fedor Mikhalych, - es wird notwendig sein, sie werden aussterben. Du verstehst die Idee. Sie werden vor dem Aussterben gerettet, indem sie mit einer Person einen mutierten Pinguin erschaffen, um ihnen einen Grund zu geben, und damit sie nicht mehr selbst aussterben.
"Keine menschlichen Experimente", gab ich zurück.
"Genau", ließ Fedor Mikhalych nicht locker. Angenommen, jemand hat daran gerochen und ihn getötet. Und inszenierte einen Terroranschlag. Und jemand vermutete, und auch er wurde getötet, wie ein Terroranschlag. Dann begannen die Geschäfte mit den Terroristen, Waffenhandel, Menschenhandel und all dies - unter der Schirmherrschaft von Greenpeace, um die Experimente an Pinguinen zu verbergen.
"Tief", sagte ich.
- Nun, diese ganze Maschine der terroristischen Täuschung gewinnt an Dynamik und eine sich selbst tragende Reaktion setzt bereits ein. Weißt du was ich meine?
"Sekou", ich sek. Ich quietsche immer noch.
- Großartig. Es stellt sich also heraus, dass Sie Leute erschießen, und es gibt mutierte Pinguine im Rücken und das war's. Das ist interessant? - Fedor Mikhalych hat mich überzeugt. Es schien mir wirklich interessant zu sein.

Ich nannte den nächsten Build des Projekts "pinguin" und machte mich daran, den Code zu verfeinern. Dimon warf ungefähr hundert verschiedene Texturen auf den Boden, Gras, Beton und andere Dinge. Fedor Mikhalych beschäftigte sich auch mit Texturen. Im Code habe ich ein Bodenmodell generiert, das aus Quadraten besteht. Jedes Quadrat hat seine eigene Textur. Ich lud eine Reihe von Modellen in den Speicher und zeigte Fedor Mikhalych, wie alles fröhlich einem Finger über den Bildschirm folgt. In der Zwischenzeit kam das erste Modell unseres Soldaten rechtzeitig von einem Freiberufler an, und ich fügte es anstelle der Monster aus Quake 2 hinzu. In mehreren Exemplaren.



Aber einmal sagte Fedor Mikhalych, wir sollten sehen, wie alles auf dem Gerät funktioniert. Und ich habe ein Entwicklerabonnement gekauft. Es hat einige Zeit gedauert, alle Zertifikate zu konfigurieren. Für mich war es ein dunkler Wald, aber Fedor Mikhalych schaffte es schnell. Wir haben das Projekt auf das Telefon hochgeladen, es gestartet, mit dem Herunterladen begonnen ... und die Anwendung ist abgestürzt.

Missverstanden.

Ich habe den Build im Emulator gestartet - es funktioniert.

Der gleiche Build auf einem realen Gerät stürzt ab.

Es ist Zeit, sich an den Debugger zu wenden.

Bereits zu diesem Zeitpunkt war mit dem Debug-Code im ikskod alles relativ gut. Ich habe den Profiler gestartet und mir die Anwendung angesehen.

- Irgendwie geht viel Erinnerung verloren, Fedor Mikhalych, schau. Wir haben 20 Freaks auf einem quadratischen Feld und sie hat bereits 150 MB ... 200 ... 250 ... 300 ... gefallen. - Ich dachte. - Lass uns zählen. Wir schaffen den Boden. Es ist 128x128 Quadrate. Jeder hat 4 Spitzen, das sind 16 Tausend Spitzen. Jedes besteht aus 3 Koordinaten und 2 Texturkoordinaten, dies sind alles Floats. Insgesamt 82 Tausend Schwimmer. Und jeder Float ist 4 Bytes. Insgesamt 320 Kb. Ein bisschen, oder?
"Nicht viel", stimmte Fedor Mikhalych zu.
- Als nächstes versenden wir Ihre Texturen mit Dimon. Wir haben jetzt 20 davon. Jeweils 512x512 und 32 Bit Farbe. Insgesamt 1 MB pro Textur, 20 MB out. Ein bisschen, oder?
"Nicht viel", stimmte Fedor Mikhalych zu.
- Als nächstes laden wir Modelle unserer Soldaten. Ich werde sie 20 Stück versenden. Jedes von zweitausend Polygonen mit jeweils 3 Eckpunkten mit jeweils 5 Gleitkommazahlen mit jeweils 4 Bytes. Gesamt ... 2,35 MB. Dumm?
"Nicht viel", stimmte Fedor Mikhalych zu.
"Obwohl nicht." Jedes Modell hat 95 Rahmen. Insgesamt 220 MB.
"Ja", stimmte Fedor Mikhalych zu, "und die Texturen darauf." 1024 x 1024 32 Bit. Insgesamt 80 MB. Nur 300 MB raus. Und das ist nur ein flaches Feld und 20 Freaks. Und im Spiel wird es viel mehr Feinde auf dem Level geben. Und alle möglichen Gegenstände. Im Simulator gibt es keine Einschränkungen hinsichtlich der Speichermenge. Und im iPhone sind es 512 MB. Das System belegt einen Teil, den Sie angeben müssen.

Ich war am Boden zerstört. In diesem Tempo müssen Sie zum Laden des Levels auf die Veröffentlichung eines iPhones mit 5-10 GB Speicher warten. Aber wie? Wie hat Carmack Quake gemacht ???

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


All Articles