Pernahkah Anda memikirkan game Anda sendiri? Dan bagaimana dengan game multi pemain Anda sendiri? Saya kira begitu! Banyak dari Anda ingin berpegang teguh pada pengembangan karya Anda sendiri, di mana imajinasi Anda yang beraneka ragam dan perfeksionisme yang luar biasa bergabung. Saya mengerti Anda dan ingin menceritakan kisah saya tentang cara yang menakjubkan ini.

Latar belakang
Semuanya dimulai kembali pada tahun 2007, ketika permainan j2me online berdasarkan karya Sergey Lukyanenko muncul. Saya belum memiliki komputer, dan saya sangat terkesan dengan game ini di telepon seluler, yang paling penting menghantam dunia terbuka. Saya terlibat dan, meskipun tidak ada tutorial, dengan cepat menemukan apa yang terjadi.
Waktu berlalu, tetapi minat tidak memudar, sudah ada tidak cukup hanya permainan. Keinginan untuk mempelajari cara kerjanya, dan keacakan mendorong penggunaan bug dengan larangan berikutnya. Kelulusan lebih lanjut dan pilihan profesi "programmer" memberi dorongan untuk pengembangan perangkat lunak pertama saya untuk mendapatkan keuntungan di dunia online.
Segera setelah pengetahuan saya di bidang OOP diperkuat, maka kami sudah memutuskan dengan teman bermain dan artis saya untuk mengembangkan MMO kami sendiri, yang akan menjadi seratus kali lebih keren!
Tentang apa permainan kita?
Game kami memuliakan dua faksi yang bertikai, Oseon dan Weiland. Masing-masing dari mereka memiliki planetnya sendiri, pada gilirannya, ia menampung bangunan-bangunan yang diperlukan untuk pengembangan pemain.

Fraksi planet asal Oseon
Planet fraksi dilindungi oleh sistem 12 gerbang. Setelah merebut semua gerbang, pemain mendapatkan akses ke planet musuh. Tidak cukup hanya dengan berteleportasi melalui jalan yang terbuka, setelah itu perlu untuk menangkap benteng - bangunan utama planet ini. Menemukan diri mereka dalam situasi yang sulit, para pemain dari sisi yang diduduki menerima pasukan cadangan dengan parameter 1,4 kali lebih tinggi dari mereka sendiri.
Pertempuran berlangsung dalam mode selangkah demi selangkah, beberapa membandingkannya dengan yang serupa di "Pahlawan", yang lain menyebut mereka semacam catur. Sebagian, mereka baik-baik saja, ada unit dengan sihir di sini, dan Anda harus berpikir beberapa langkah di depan dengan kepala Anda.

Pertempuran dengan musuh
Namun, dunia game PvP yang kejam memiliki mekanisme menarik lainnya, mulai dari pengembangan simpanan yang kaya dan berakhir dengan perburuan pemburu harta karun.
Prototipe
Karena kami tidak memiliki pengalaman dalam membuat game MMO, kami memutuskan untuk mengambil semua yang buruk. Set kami meliputi: Anthill, Netty, MySQL. Ini bukan teknologi itu. Setelah banyak pekerjaan dilakukan, kami mengalami banyak masalah: kurangnya editor antarmuka, mikro-log peta saat bergerak, input teks, dan banyak lagi. Di layar penuh, game tampak menjijikkan.

Prototipe permainan. Pengembangan tambang
Dalam beberapa kasus, ketika beralih status permainan, kamera virtual pada mesin mulai berperilaku aneh.

Prototipe permainan. Tertunda
Setelah satu tahun pengembangan, ketika tidak mungkin lagi untuk mundur, kami tetap menyelesaikan mekanisme dasar permainan, menyusun editor peta dan memutuskan bahwa sudah waktunya untuk mengujinya di depan umum.
Kami menambahkan game ke VK (tanpa katalog) dan mengumumkan peluncuran di grup kami, di mana ada sekitar 100 orang.
Pada saat ini, permainan memiliki kontrol yang tidak dapat dipahami yang melibatkan keyboard, ada banyak bug, serta peta yang terlalu sederhana, yang hanya memiliki dua lapisan (rumput dan pohon). Dan setelah tiga hari bermain game di VK, hanya 15 orang yang mendaftar - orang tidak mengerti cara bermain. Dan kami memutuskan untuk mengulang semuanya dari awal.
Tangkapan layar dari versi lama
Online bagus

Menu interaksi pemain

Berkelahi
Lech, bukan itu, ayo duluan!
Mungkin, banyak yang dihadapkan dengan kegagalan, berpikir bahwa ini bukan milik mereka, karena banyak waktu telah dihabiskan, tetapi tidak ada hasil yang terlihat. Tetapi menyerah adalah hal yang bodoh ketika Anda telah datang jauh. Setelah beberapa bulan, kami dengan pengalaman yang ada memutuskan untuk mengambil permainan lagi.
Kami memutuskan untuk membuat versi baru dari klien dengan rendering grafik melalui kartu video. Dari sekian banyak kerangka kerja, Starling tampak paling menarik, memiliki API yang mirip dengan flash standar, didukung oleh Adobe, dan dimungkinkan untuk menggunakan grafik yang ada tanpa banyak usaha. Akhirnya, versi baru berfungsi dengan baik.
Untuk meraster vektor dengan cepat, saya mengambil Dynamic TextureAtlas Generator . Tetapi di perpustakaan berikutnya hampir sepenuhnya harus ditulis ulang dan ditinggalkan atlas, animasi mengambil banyak ruang dan tidak bisa masuk ke dalam atlas dari ukuran yang diizinkan.
Kartu
Setelah kami menemukan teknologi pada klien, kami memutuskan untuk berurusan dengan kartu server . Setiap planet dapat terdiri dari satu atau lebih lokasi, di mana Anda bisa ke kanan atau kiri. Untuk setiap lokasi, sepotong peta dibuat, awalnya terdiri dari dua lapisan. Kemudian, kami memutuskan untuk menambahkan layer lain, dan kemudian layer lain, dan sebagai hasilnya diselesaikan pada empat:
- rumput / tanah;
- batu \ air;
- dekorasi berukuran kandang;
- pemandangan luas.
Idenya adalah bahwa tiga lapisan pertama digambar dalam satu bitmap dan dikirim ke memori video. Ini adalah pendekatan yang baik ketika alih-alih tiga lapisan, satu digambar di latar belakang. Tapi itu bukan tanpa masalah: ketika beralih MovieClipa ke frame berikutnya untuk rasterisasi, semua frame sebelumnya harus digambar. Di pintu masuk ke lokasi, permainan membeku, jadi diputuskan untuk mentransfer semua ubin ke BitmapData sebelumnya dan membuat copyPixels cepat. Tetapi pada saat yang sama, dekorasi yang tidak menyenangkan diperoleh pada awal permainan pada saat merasterisasi sejumlah besar frame. Anda mungkin telah melihat beberapa browser membeku saat startup ketika memuat sumber daya. Kami tidak ingin permainan kami menjadi tidak valid yang sama, jadi saya membatasi waktu untuk menggambar ubin untuk setiap frame. Di sini Anda dapat membaca lebih lanjut tentang cara melakukannya.
Semua kartu memiliki ukuran 20x16 petak persegi dengan ukuran 64px. Data peta ditulis ke file dalam format biner, di mana batas-batas lapisan ditentukan sebelumnya dan tetap hanya untuk merekam nomor bingkai MovieClip. Dengan demikian, berat file peta adalah 1280 byte. Namun kemudian formatnya dikonversi ke JSON untuk memudahkan bekerja dengan data.
Akibatnya, pengerjaan peta mengambil bagian penting dari pengembangan klien. Agar dapat membuat peta yang indah, editor ditulis di Flex.

Editor peta
Masing-masing dari 14 planet memiliki flora dan fauna sendiri, sehingga Anda dapat secara visual memahami di planet mana Anda berada.

Berbagai
Juga, secara pemrograman, kami menambahkan separuh ubin untuk kartu, dari atas dan bawah, yang hanya menduplikasi ubin tetangga. Ini dilakukan untuk elemen interaktif terkemuka seperti tombol menu. Bidang lokasi tetangga dengan kabut perang ditambahkan ke kiri dan kanan - ini adalah ide bagus yang menyelesaikan beberapa masalah sekaligus. Permainan mulai terlihat jauh lebih baik di layar penuh.

Kartu dengan kabut perang di sisi
Server
Saat berurusan dengan klien, kami secara bersamaan mencari programmer server, tetapi tidak banyak yang ingin menulis permainan yang meragukan tanpa dokumentasi normal. Beberapa mulai menulis dan segera keluar, karena menjadi tidak jelas apa yang harus ditulis, dan untuk menyelidiki duri logika permainan itu membosankan. Setelah beberapa waktu, kami memutuskan bahwa kami membutuhkan spesialis yang dapat mendesain server di Jawa, dan jika dia meninggalkan proyek di masa depan, saya dapat menambahkannya. Pemecah masalah pengrajin lokal membantu kami dengan arsitektur server. Dia, bisa dikatakan, menempatkan kita di jalan yang benar: dia menunjukkan cara membuat server, dan meminjam arsitektur dari kursus pelatihan Mail.ru. Solver tidak terkecuali dan setelah beberapa saat meninggalkan kami. Setelah satu tahun upaya, saya berhasil menulis semua logika permainan dasar. Sekarang, melihat ke belakang, saya bingung mengapa kami tidak menulis server di Akka?
Anda dapat membaca tentang arsitektur di sini - Arsitektur server permainan online menggunakan Skyforge sebagai contoh , Anda juga dapat menemukan ceramah tentang Intuit. Di server kami, tentu saja, bukan 2 juta baris, tetapi juga cukup banyak. Tidak ada serat (seperti di skyforge) yang digunakan, dan server kami kemungkinan besar ternyata kurang dapat dibaca. Ngomong-ngomong, kode yang digunakan untuk serat yang sama untuk multitasking non-ramai di Skyforge diterbitkan jauh kemudian, ketika semuanya sudah bekerja untuk kita.
Sementara saya sibuk dengan server dan menempelkan logika pada klien, artis menyelesaikan detail yang hilang, yang langsung jatuh ke klien. Segera setelah server siap, kami meluncurkan uji alpha. Kali ini semuanya hampir seperti seharusnya, tetapi bug dan kesalahan server harus diperbaiki untuk waktu yang lama.
Bolak-balik. Mekanik permainan mandiri
Saya ingin memberi tahu Anda tentang hal lain yang tidak biasa dalam permainan. Apa yang akan Anda sebutkan pemain yang secara spesifik membuat pasukan tidak lengkap dan kalah dari pemain / bot lain? Kami menyebutnya "buah plum." Mereka menggabungkan pengalaman dan menurunkan level mereka dengan sengaja, sehingga mereka menjadi lebih kuat di level mereka. Ini penting ketika level pemain yang dapat diserang terbatas dan memberi mereka lebih banyak peluang pengembangan. Menjadi lebih mudah untuk mengalahkan musuh tingkat tinggi dan mendapatkan lebih banyak hadiah. Ini seperti memompa Persia Anda, tetapi ke arah yang berlawanan. Meskipun mungkin tampak lebih sederhana daripada game klasik, menguras pengalaman membutuhkan Anda lebih banyak waktu dan keterampilan memompa awalnya. Jika Anda menurunkan level karakter yang lemah, maka ini tidak akan memberikan keuntungan besar, dan hanya menarik pemain ke rata-rata. Naikkan dan turunkan level bisa sangat lama. Bahkan setelah mencapai pengembangan maksimum untuk level maksimum saat ini, pemain dapat naik ke level yang lebih tinggi lagi untuk mengakses teknologi baru dan menggabungkan kemajuannya dari pengalaman lagi, tetap kuat dalam teknologi.
Pemula memiliki masalah ketika mereka tidak dapat melakukan apa pun untuk kurcaci yang dipompa tersebut. Kami memecahkan masalah ini dengan memperkenalkan batasan, membagi pemain menjadi dua kelompok: Anda hanya dapat menyerang bot pada bot, dengan batasan pada level maksimum pada pemain lain dan pada pemain gabungan yang sama seperti mereka. Dengan demikian, mereka hampir berhenti memberikan tekanan pada keseimbangan permainan, dan yang paling penting, mereka dapat terus melakukan apa yang mereka sukai.
Itu tidak berhasil, bukan fartanulo
Kami memasuki katalog game VK pada 4 Februari 2018, dan bukan yang pertama kalinya. Aplikasi pertama kami ditolak tanpa penjelasan, sementara mendaftar ulang kami tetap ditambahkan ke katalog.
Terlepas dari waktu pengembangan game yang panjang, itu tidak mungkin untuk menangkap semua detail, kami membuat banyak kesalahan. Pertama-tama, mereka membuat kesalahan dengan platform: tidak setiap pemain siap menghabiskan banyak waktu dalam game 2D berbasis browser, yang membutuhkan mekanik. Banyak orang yang terbiasa dengan permainan yang lebih sederhana dan lebih mudah dipahami, di mana ada lebih banyak kesenangan dari awal. Pelatihan kami dalam permainan, secara halus, gagal. Setelah menyelesaikan tutorial, pemain dengan aman melupakan apa yang ada di sana, dan mungkin mereka bahkan tidak membaca.
Menurut statistik VK, kami memiliki banyak pemain, untuk sebagian besar hanya mereka yang pernah memainkan permainan lama itu dan sudah akrab dengan mekanik tetap untuk waktu yang lama.
48 minggu kemudian ...
Sekitar setahun setelah peluncuran versi alfa, menjadi jelas bahwa Flash akan segera berhenti bekerja di browser. Sejak saat itu, saya memutuskan bahwa saya harus mengirim klien ke sesuatu yang lebih ulet. Tentu saja, lebih baik menulis dalam bahasa yang akrab, jadi saya memilih LibGDX. Kerangka kerja Java ini memungkinkan kami untuk tidak menulis ulang beberapa bagian dari logika, tetapi cukup menyalinnya dari server. Ini memiliki abstraksi yang bagus untuk peta ubin dan implementasi untuk Ubin, yang memungkinkan kami untuk dengan cepat menulis kode untuk peta kami. Tetapi ada juga kelemahan: rendering font, kurangnya editor antarmuka visual, dll.
Saat ini, klien alpha untuk android ditulis, yang mengimplementasikan 50% dari semua fitur dalam game.

Klien Game Seluler
Pembangunan masih berlangsung. Jika Anda memiliki keinginan untuk menggambar atau menulis sesuatu untuk klien seluler - tulis.
Saya juga ingin mengucapkan terima kasih kepada insinyur suara Peresvet Mukhanov dan komposer Artem Davydov, mereka menulis semua yang dapat didengar dalam permainan dalam waktu yang sangat singkat dan kualitas yang sangat tinggi.