Game sendiri. Bagian 1

Penafian


Ini artikel tentang bagaimana saya dan teman-teman menulis permainan. Kami menambahkan dan menjualnya, tetapi itu tidak memberi kami uang. Namun, itu sangat menarik dan menyenangkan bagi kami untuk melakukannya, dan saya memutuskan untuk membagikan kenangan saya. Akan ada minimum rincian teknis dalam artikel, saya tidak akan memposting kode, karena belajar darinya tidak ada gunanya. Ini adalah kode penggemar, bukan profesional, ada kesalahan pada kesalahan. Tidak seorang pun dari kita memiliki pendidikan IT dan tidak ada yang pernah terlibat secara profesional dalam pemrograman. Kadang-kadang saya akan memposting rincian teknis, karena tanpa ini, tidak ada tempat. Saya juga meminta pembaca untuk tidak mengirim komentar tentang apa yang kita pengisap, karena itu menghina untuk membaca. Padahal benar.

Bagian artikel lainnya
Bagian 2
Bagian 3

Bab 1. Peristiwa prasejarah


Banyak waktu telah berlalu dan saya tidak terlalu mengingat detail halusnya, tetapi saya pasti ingat bahwa saya pulang lebih lambat dari biasanya dan agak lelah ketika saya melihat panggilan Fyodor Mikhalych. Tidak terjawab

Aku akan meneleponmu kembali besok, pikirku.

Fedor Mikhalych selalu menjadi jantung dari proyek kami. Dan itu seperti otak, meskipun, ini tidak sepenuhnya benar juga. Saya adalah tangan, saya kira. Tentunya, saya agak back office. Dan Fedor Mikhalych - bagian depan. Karena itu, ia selalu dipenuhi ide. Dan aku selalu memotong pikirannya dengan kasar:

- Fedor Mikhalych, ini tidak mungkin, untuk ini akan perlu untuk mengulang semua yang ada di mesin, dan mengubah setengah dari eset. Dan ini belum lagi fakta bahwa ide itu sendiri bodoh, saya tidak suka - jadi saya akan menjawab panggilan Fyodor Mikhalych, sehingga dalam beberapa minggu saya akan menerjemahkan ide-idenya menjadi kode, memanggilnya, dan mengatakan bahwa saya datang dan menulis Krutetskaya hal ... Tapi nanti.

Sebelum itu, masih ada sekitar satu tahun. Sementara itu, kami pikir kami menulis MMORPG.

MMORPG kami mulai menulis entah bagaimana tiba-tiba. Baik saya, Fyodor Mikhalych, maupun Dimon, tidak pernah terlibat secara profesional dalam pemrograman sama sekali, apalagi mengembangkan game. Kita semua bekerja di bank, Dimon berdagang dalam mata uang, utang dalam I, dan Fedor Mikhalych terlibat dalam dukungan perdagangan. Selain itu, Dimon dan Fedor Mikhalych bekerja di satu bank, dan saya di bank lain. Tapi kami adalah gamer. Kami ingin menulis game. Saya "mencoba-coba" dalam pemrograman dari sekolah, pada suatu waktu, dengan bantuan buku Andre Lamot "Programming Games for Windows", saya menulis klon Wolfenstein dari permainan di C, saya menulis dengan jelas dari buku itu, tetapi kompiler saya tidak tahu cara menanamkan assembler dalam kode C, oleh karena itu, tidak seperti versi buku, mesin saya bekerja sangat lambat. Lalu saya tidak melakukan pemrograman sama sekali untuk waktu yang lama, sampai, sekali, di toko buku, mata saya tertuju pada buku "Pemrograman Game 3D untuk Windows" oleh Andre Lamot.

Deja Vu, pikirku dalam bahasa Prancis. Karena saya bekerja di bank Prancis, kadang-kadang saya harus melakukan ini.

Tapi itu buku yang sama sekali berbeda. Saya membalik-baliknya dan menyadari bahwa inilah yang kami butuhkan. Saya menginginkannya. Saya ingin melakukan apa yang dikatakannya. Saya menelepon Fedor Mikhalych dan mengundangnya untuk menulis game 3D. Dan dia setuju.

Istri saya memasak makan malam yang sangat lezat, tetapi saya sangat lelah dan diam-diam mengambil piring saya. Saya berpikir tentang mengapa kode tidak dikompilasi. Itu musim panas dan membosankan di tempat kerja. Saya bahkan merindukan laptop untuk bermain di waktu luang saya. Di musim panas, tidak ada orang di pasar, dan ada banyak waktu luang di tempat kerja. Dan kode tidak dikumpulkan karena variabel global dalam saya dideklarasikan dalam file .h, dan itu dimasukkan dalam beberapa file .c. Dan kompiler bersumpah di redefinisi.

#ifndef file_h #define file_h 

Akan datang nanti. Sementara itu, saya menemukan sepeda saya. Saya menemukan banyak dari mereka. Setelah membaca buku Lamp, saya merasa bisa melakukan apa saja. Saya mulai mempelajari OpenGL dan ternyata, secara umum, saya bahkan tidak perlu menulis apa pun (itu adalah saluran tetap, ya. Saya akan belajar banyak tentang bagaimana shader bekerja dan apa yang perlu saya tulis). Saya cepat-cepat menumpuk walker kikuk di permukaan di dunia 2D dari perspektif orang pertama (dunia terlihat dalam 3D, tetapi mesin tidak tahu bagaimana menangani gerakan di ketinggian, yaitu, pada kenyataannya, semuanya 2D, seperti di Wolf). Ada analisis terperinci tentang md2 dan obj fath di buku ini, dan saya menarik modelek dari Gempa ke-2 dan dari Internet. Semuanya baik-baik saja, tetapi karena kesalahan seperti yang di atas, kode mungkin tiba-tiba berhenti mengkompilasi setelah perubahan kecil. Dan dia tidak bisa berhenti. Saya sering bingung tentang hal itu pada saat itu, dan sering menemukan sepeda.

Dan ya, saya menulis mesin untuk MMORPG kami. Dan Fedor Mikhalych dan Dimon bertanggung jawab atas hampir semua hal lainnya. Saya merasa seperti John Carmack. Saya merasa baik. Tapi kemajuannya lambat. Dan Fedor Mikhalych terus menelepon. Ini dia sekarang. Dia seharusnya menelepon kembali.

Saya berterima kasih kepada istri saya untuk makan malam dan menuangkan anggur untuk diri saya sendiri. Kita perlu berbicara dengan Fedor Mikhalych. Istri saya memandang saya sebagai serigala. Menurut pendapatnya, saya harus berbicara dengannya. Tapi tugas di atas segalanya.

- Halo, Fedor Mikhalych, menelepon?
- Pate, letakkan omong kosong ini yang kamu tulis, kami sampah!
- ???, - tentu saja, saya menjawab salah.
- Kita perlu menulis game untuk iPhone. Masa depan adalah mobile gaming.

Saya harus mengatakan, Fedor Mikhalych bukan yang pertama datang dengan ide ini. Appstor tumbuh aktif. Proyek-proyek besar mulai muncul, tetapi ada banyak tempat di pasar. Dan semua orang ingin pergi ke sana.

- Oke. Mari kita pikirkan.
- Nehru berpikir. Ayo lakukan permainan. Hanya sesuatu yang lebih sederhana, bukan MMORPG, kalau tidak kita tidak akan menambahkan apa pun pada masa pensiun. Tetapi kita harus sudah melepaskan sekarang, sebelum kereta pergi.
- Saya ingin menulis dalam 3D. Bagaimana cara memainkan 3D di iPhone?
"Lupakan saja," Fedor Mikhalych sangat gigih. - Jangan menulis 3D. Mari kita pikirkan genre.
- Pikirkan itu. Oke, mari kita lihat apa yang ada di sana. Saya menaruh kode Iks dan melihatnya. Ketika saya membeli macbook untuk diri saya sendiri, saya melihat ada hackcode gratis di disk. Tampaknya lingkungannya normal.
- Luar biasa. Saya melemparkan tautan email Anda ke situs-situs dengan tutorial tentang pemrograman untuk iPhone. Saya terutama menyukai beberapa Ray Wenderlich. Lihatlah.
- Bagus

Sesuatu seperti ini saya terjun ke dunia pengembangan ponsel. Tanpa pendidikan khusus, tanpa pengetahuan tentang OOP, tanpa gagasan tentang apa yang harus dikembangkan. Dan pikiran pertama saya ketika saya membuka situs pemrograman pendidikan untuk iPhone adalah "sintaks yang bodoh." Dengan kata-kata ini, saya masih menggambarkan Objective C.

Maka itu lebih menyenangkan. Ternyata kebiasaan saya

 GLBegin(GL_TRIANGLES); GLVertex3f(โ€ฆ); GLend(); 

Mereka tidak bekerja di iPhone. GLTranslatef dll. Juga tidak berfungsi. hal-hal bodoh.

- Oke. Bukan tidak ada artinya bagi saya untuk membaca Lampu; saya tahu cara kerjanya, pikir saya. Dan dia menulis.

Di suatu tempat dalam beberapa hari saya menemukan Vertex Array Objects dan cara bekerja dengannya dalam shader. Butuh satu minggu lagi untuk membuat proyek di mana Anda bisa memindahkan kubus dengan tekstur animasi di layar. Sebagian besar waktu dihabiskan untuk menggambar serangkaian tekstur untuk animasi. Sprite. Setelah sekitar dua minggu saya sudah menyiapkan platformer kecil. Saya menamainya Agen Ivan, untuk menghormati calon guru bahasa Ibrani saya.



Selama ini Fedor Mikhalych berpikir keras. Faktanya adalah bahwa, menurutnya, platformer itu tidak masuk akal untuk menulis. Itu primitif.

"Ini primitif," katanya. - Itu akan lebih serius. Omong-omong, apakah Anda mendengar bahwa Anda akan menerbitkan ulang UFO di komputer Anda?
- X-Com?
- Ya.
- Sudah saatnya. Game keren itu. Omong-omong, itu akan sangat cocok dengan antarmuka sentuh. Apakah mereka akan membiarkannya keluar di iPhone?

Fedor Mikhalych berpikir sejenak.

- Ayo.

Sekarang saya berpikir.

- Ayo kita lakukan X-com? Kami tidak punya hak.
- Yah, tiruannya. Bukan X-com sendiri. Mereka akan rilis di komputer, dan kita akan diam di iPhone.

Itu menarik. Kami berdua sangat menyukai X-com. Kemudian saya merasa bahwa membuat klon X-com tidaklah sulit. Lebih sulit daripada platformer, tentu saja, tetapi tidak banyak. Selama enam bulan harus mengatasinya. Jika Anda beruntung, mari kita tayangkan langsung di iPhone sebelum remake keluar di PC. Itu akan keren. Itu akan menyenangkan. Dan yang paling penting, ini bukan proyek besar. Jika saya membuat platformer dari nol dalam 3 minggu, maka Ikskoy adalah 6 bulan. Kami segera gandakan dengan 2 agar tidak marah, total - setahun. Keren

Bab 2. Awal Mula


Kami terbakar. Saya menulis kode, Dimon membuat tekstur lantai dan bekerja dengan freelancer yang membuat model dalam format md2. Selain para prajurit itu sendiri, yang menjadi tanggung jawab saya sebagai pekerja lepas. Ya, Fedor Mikhalych berpikir tentang struktur permainan, plot, senjata, arsitektur level, keseimbangan, dan itu semua untuk itu.

Tapi, yang paling penting, saya menulis mesin di OpenGL, seperti yang saya inginkan.

Awalnya susah. Sebagian besar waktu saya belajar menulis di Objective-C dan OpenGL. Lebih kecil - menulis game itu sendiri. Namun seiring berjalannya waktu, saya terlibat, dan sekitar sebulan kemudian, monster animasi dari Quake 2 dalam simulator iPhone berlari setelah jari saya melintasi bidang bertekstur persegi (model kami belum siap). Fedor Mikhalych menyesuaikan cerita dengan permainan:

- Akan ada masa depan, tetapi tidak jauh. Dunia didominasi oleh perusahaan. Dan serangan di sana-sini, tiba-tiba, seluruh dunia berada dalam serangan.
โ€œSerangan teroris itu buruk,โ€ jawab saya.
- Yah, tentu saja, itu intinya. Dan Anda akan bertarung dengan mereka.
"Berjuang itu bagus," jawabku. - Tapi membosankan. Ini bukan untukmu menembak Elies.
- Jadi apa. Kita bisa dan di Elien. Seperti yang kita inginkan, kita akan melakukannya, ini adalah permainan kita.
- Kami tidak dapat melakukannya oleh Elien, itu akan menjadi X-com. Dan bagi orang-orang itu tidak menarik.
"Ayo, binatang," Fyodor Mikhalych tidak menyerah. Dia hanya perlu membakar seseorang.
"Kasihan binatang," jawab saya.
- Nah, ayolah binatang keji.
- Atau mungkin mereka baik dalam jiwa?
- Di sini, Anda berpikir dengan benar. Tetapi bagaimana jika hewan-hewan imut di jiwa ini jahat?
- maksud saya? - Saya benar-benar tidak mengerti.
- Baiklah, ambil Greenpeace. Dia melindungi, katakanlah, penguin, dari kepunahan.

Saya sedikit terkejut:

- Kapan penguin mulai mati? - Saya bahkan naik ke Wikipedia. Tidak, semuanya beres, jangan mati. "Mereka tidak mati," kataku keras-keras dan menudingkan jari ke layar.
- Ya, tenang, - jawab Fedor Mikhalych, - itu akan perlu, mereka akan mulai mati. Anda mengerti idenya. Mereka diselamatkan dari kepunahan dengan menciptakan penguin mutan dengan seseorang untuk menambah alasan bagi mereka, dan agar mereka tidak mati sendiri.
"Tidak ada eksperimen manusia," balasku.
"Tepat sekali," Fedor Mikhalych tidak menyerah. Misalkan seseorang mengendusnya dan mereka membunuhnya. Dan melakukan serangan teroris. Dan seseorang menebak, dan dia juga terbunuh, seperti serangan teroris. Kemudian kesepakatan dengan para teroris dimulai, perdagangan senjata, perdagangan manusia, dan semua ini - di bawah naungan Greenpeace untuk menyembunyikan percobaan pada penguin manusia.
"Dalam," kataku.
- Nah, seluruh mesin penipuan teroris ini mendapatkan momentum dan reaksi mandiri sudah dimulai, Anda tahu apa yang saya maksud?
"Sekou," aku benar-benar detik. Saya masih mencicit.
- Luar biasa. Jadi ternyata Anda seperti menembak orang, dan ada penguin mutan di belakang dan hanya itu. Apakah ini menarik? - Fedor Mikhalych meyakinkan saya. Itu benar-benar menarik bagi saya.

Saya menyebut proyek pembangunan berikutnya "pinguin" dan mulai memperbaiki kode. Dimon melemparkan sekitar seratus tekstur lantai, rumput, beton, dan lainnya. Fedor Mikhalych juga terlibat dalam tekstur. Dalam kode saya menghasilkan model lantai yang terdiri dari kotak. Setiap kotak memiliki teksturnya sendiri. Saya memasukkan banyak model ke dalam memori dan menunjukkan kepada Fedor Mikhalych bagaimana semuanya dengan riang mengikuti jari di layar. Sementara itu, model pertama prajurit kami tiba pada waktunya dari seorang freelancer, dan saya menambahkannya bukan monster dari Quake 2. Dalam beberapa salinan.



Tetapi begitu Fedor Mikhalych mengatakan bahwa kita harus melihat bagaimana semuanya bekerja pada perangkat. Dan saya membeli langganan pengembang. Butuh waktu untuk mengkonfigurasi semua sertifikat. Bagi saya itu adalah hutan yang gelap, tetapi Fedor Mikhalych berhasil dengan cepat. Kami mengunggah proyek ke telepon, memulainya, mulai mengunduh ... dan aplikasi macet.

Disalahpahami.

Saya meluncurkan build di emulator - itu berfungsi.

Bangunan yang sama pada perangkat nyata rusak.

Saatnya beralih ke debugger.

Sudah pada saat itu, semuanya relatif baik dengan kode debug di ikskod. Saya meluncurkan profiler dan mulai melihat aplikasi.

- Entah bagaimana banyak memori hilang, Fedor Mikhalych, lihat. Kami memiliki 20 orang aneh di lapangan persegi dan dia sudah makan 150 MB ... 200 ... 250 ... 300 ... jatuh. - Saya pikir. - Mari kita hitung. Kami menciptakan lantai. Ini adalah 128x128 kotak. Masing-masing memiliki 4 puncak, ini adalah 16 ribu puncak. Masing-masing terdiri dari 3 koordinat dan 2 koordinat tekstur, semuanya mengapung. Total 82 ribu mengapung. Dan setiap float adalah 4 byte. Total 320 Kb. Sedikit, ya?
"Tidak banyak," Fedor Mikhalych setuju.
- Selanjutnya, kami mengirimkan tekstur Anda dengan Dimon. Kami sekarang memiliki 20 dari mereka. Masing-masing warna 512x512 dan 32 bit. Total 1 MB per tekstur, 20 MB. Sedikit, ya?
"Tidak banyak," Fedor Mikhalych setuju.
- Selanjutnya, kita memuat model prajurit kita. Saya akan mengirimkan 20 buah. Masing-masing 2 ribu poligon, masing-masing dengan 3 simpul, masing-masing dengan 5 float, masing-masing dengan 4 byte. Total ... 2,35 MB. Bodoh?
"Tidak banyak," Fedor Mikhalych setuju.
"Meski tidak." Setiap model memiliki 95 bingkai. Total 220 MB.
"Ya," Fedor Mikhalych setuju, "dan teksturnya." 1024x1024 32 bit. Total 80 MB. Hanya 300 MB. Dan ini hanya bidang datar dan 20 orang aneh. Dan di dalam game akan ada lebih banyak musuh di level. Dan segala macam benda. Dalam simulator, tidak ada batasan jumlah memori. Dan di iPhone 512 MB-nya. Sistem menempati bagian, Anda harus pamer.

Saya sangat terpukul. Dengan kecepatan seperti itu, untuk memuat level, Anda harus menunggu rilis iPhone dengan memori 5-10 GB. Tapi bagaimana caranya? Bagaimana Carmack melakukan Gempa ???

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


All Articles