Pengembang game VVVVVV untuk menghormati dekade-nya membuat kode sumber terbuka


Hari ini adalah peringatan 10 tahun rilis VVVVVV!

Meskipun, mungkin, besok, sebenarnya, permainan pertama kali tersedia pada pukul 3 pagi GMT pada 11 Januari 2010, setelah hari yang sangat panjang menghilangkan setiap bug yang saya temukan, membuat rakitan menit terakhir dan mencoba untuk perlahan-lahan mengunggah semuanya ke server melalui Internet yang sangat tidak dapat diandalkan sebuah senyawa yang terus-menerus rusak. Tapi saya selalu hidup dengan moto " besok tidak datang sampai Anda bangun ", jadi saya menganggap tanggal rilis nyata pada 10 Januari <3

Ya Tuhan, sepuluh tahun.

VVVVVV adalah permainan yang begitu penting bagi saya sehingga saya bahkan tidak tahu harus mulai dari mana. Saya ingin menandai tanggal ini entah bagaimana dengan cara yang istimewa, jadi hari ini saya mengungkapkan kode sumber permainan!

[Kode sumber VVVVVV di github]

Repositori berisi dua versi - desktop satu , porting oleh Simon Roth ke C ++ pada 2011 , dan yang berikutnya, yang diperbarui dan didukung oleh Ethan Lee , serta versi mobile yang ditulis dalam Actionscript for Adobe AIR, berdasarkan versi flash asli gim v1.0 .

Saya ingin mengucapkan terima kasih banyak kepada Ethan Lee , yang banyak membantu saya, termasuk dalam menyiapkan repositori untuk komunitas dan mengatur pengumuman ini di AGDQ (halo, pelari cepat!)! Ethan terima kasih!


Tinjauan singkat tentang kode sumber


Di sini akan logis untuk mengajukan pertanyaan: "Apa yang menarik dalam kode sumber VVVVVV?" .

Saya pikir bahkan sekilas pada kode sumber, Anda dapat dengan cepat memahami bahwa secara teknis permainan VVVVVV tidak dipikirkan dengan baik! Bahkan dengan standar pengembang otodidak indie, kodenya cukup kacau.

Catatan / penjelasan yang berpotensi menarik tentang mengapa segala sesuatu tampak persis seperti itu:

  • Versi C ++ memiliki banyak hal aneh yang menjadi logis hanya jika Anda ingat bahwa game pertama kali dibuat pada flash dan kemudian diangkut secara langsung dengan semua kekurangannya. Sebagai contoh, mungkin kebiasaan pemrograman terburuk saya adalah mendeklarasikan variabel temporer seperti i, j dan k sebagai anggota setiap kelas sehingga mereka tidak harus dideklarasikan di dalam fungsi (yang membosankan karena alasan yang membosankan). Ini menyebabkan munculnya beberapa serangga jahat dan sulit ditangkap, untuk sedikitnya. Secara khusus, beberapa fungsi penghitungan tabrakan entitas memiliki variabel umum i . Oleh karena itu, loop tak terbatas dimungkinkan.
  • Jika Anda mencari teks gim, sebagian besar (tetapi tidak semua) ada di kelas Scripts.cpp dan TerminalScripts.cpp . Intinya, fungsi-fungsi ini memuat data ke dalam parser skrip yang sangat sederhana yang mengontrol logika cutscene. Fakta yang lucu: bertahun-tahun yang lalu, para modder membalikkan " skrip internal " ini untuk melakukan hal-hal luar biasa dengan level buatan sendiri, keberadaan yang bahkan tidak dapat saya bayangkan.
  • Pada titik tertentu dalam proses pengembangan, saya memutuskan bahwa membagi kode menjadi input, logika, dan rendering adalah kebiasaan yang baik, dan saya membawanya ke hati. Bagian utama dari kode kritis gim ini adalah dalam tiga file - input.ccp , logic.cpp dan salah nama titlerender.cpp . Setiap kondisi permainan dikemas ke dalam tiga file ini dengan nama fungsi seperti teleporterrender dan towerlogic . Ada banyak sekali copy-paste.
  • Semua level dikodekan dalam array besar yang dihasilkan dalam editor file saya sendiri, yang mengekspor level ke kode sumber dari mana saya bisa membaca. Inilah cara saya bekerja saat membuat flash game pada tahun 2009 - akses ke sumber daya data eksternal adalah tugas yang sulit, jadi pada saat itu lebih logis untuk mengkompilasi mereka ke dalam game itu sendiri. Semua file yang sangat besar (mis. Spacestation2.cpp, Finalclass.cpp, dan sebagainya) dibuat dengan cara ini. Untuk kelengkapan, saya mengunggah kode editor di sini , tetapi jujur ​​saja, itu tidak berlaku sekarang (memerlukan Allegro dan Mingw untuk mengkompilasi). Untuk mengubah skema level terakhir, saya menulis alat serupa!
  • Ketika saya menulis kode, saya tidak benar-benar mengerti bagaimana kelas statis bekerja dan mengapa penggunaannya adalah ide yang bagus. Tampaknya saya membaca di suatu tempat bahwa kelas-kelas statis dan variabel global buruk dalam sekejap, jadi saya mencoba sepenuhnya menghindarinya. Apa hasilnya? Secara harfiah setiap fungsi dalam game melewati argumen berikut: "Grafik & dwgfx, Game & game, mapclass & map, entitasclass & obj, UtilityClass & help" .
  • Faktanya, tidak ada objek sementara di VVVVVV, dan selama inisialisasi pertama game, ia mengisi semua array entitas (dan sebagian besar array data lainnya) dengan ratusan entitas kosong. Itu karena saya membaca di suatu tempat bahwa menghapus objek dalam sekejap menyebabkan pengereman yang aneh, karena pengumpul sampah masuk dan memperlambat semuanya, dan ini sampai batas tertentu benar. Saya terus mematuhi kebiasaan aneh ini di proyek-proyek baru sampai baru-baru ini - di Dicey Dungeons saya akhirnya meninggalkannya.
  • Dan satu hal lagi: bersama dengan parser cutscene, saya punya cara lain untuk mengontrol logika permainan selama bagian - mesin negara terbatas monolitik, yang pada akhir proyek benar-benar di luar kendali! Itu dapat ditemukan di Game :: updatestate , dan saya sarankan membacanya, bahkan jika Anda tidak ingin membaca kode lain. Dia mengelola aspek-aspek seperti memicu dimulainya cutscenes yang kompleks, titik-titik di mana para teleporter mengirim teleport, pengaturan waktu animasi tingkat penyelesaian, dan banyak hal lain yang ingin aku masukkan ke dalam game dengan cepat. Negara-negara diberi nomor dan yang terbesar adalah 4099 (ada nomor yang tidak digunakan). Ketika mengembangkan permainan, ada notepad di sebelah saya, di mana angka-angka paling penting ditulis: nomor 1.000 memulai pemilihan "perhiasan mengkilap", nomor 3 040 memulai penyelesaian satu tingkat tertentu, nomor 3 500 memulai akhir permainan. Sistem bodoh ini menyebabkan permainan speedran hebat dalam 50,2 detik dalam kategori% .

Tidak tahu harus berkata apa tentang ini? Saya masih muda, dan lebih menarik bagi saya untuk membuat sesuatu di layar daripada mengimplementasikannya dengan benar. Mungkin yang terbaik dalam kode sumber VVVVVV - ini telah menjadi bukti bahwa Anda dapat membuat sesuatu sendiri, bahkan jika Anda bukan programmer yang sangat baik.

Melihat ke belakang setelah bertahun-tahun, saya merasa sangat lucu bahwa sebagian besar semua ini adalah beberapa copy-paste dari bagian yang sama dengan nilai yang berubah. Karena hal ini, sepuluh tahun kemudian, kode ini hampir tidak mungkin untuk dipertahankan, tetapi ketika saya berada dalam ketebalannya, saya dapat melakukan iterasi yang sangat cepat dan menambahkan elemen baru. Selama dekade terakhir, saya telah mengembangkan kebiasaan yang lebih baik, dan saya pasti telah tumbuh banyak sebagai seorang programmer, tetapi sekarang tampaknya saya bekerja lebih lambat karena ini.


Pesta kejutan hari jadi!


Ketika saya sedang bersiap untuk menerbitkan artikel, Sergio Kornaga mengumumkan kemacetan permainan untuk menghormati dekade VVVVVV!

Ulang tahun ke 10 VVVVVVV eVVVVVVent!

Saya sangat senang dengan hal ini, haha, dan saya suka situs trainwreck yang agung, yang mengadakan kemacetan Klik of the Month, yang selalu saya ikuti di sekitar waktu pengembangan VVVVVV. Tampaknya sempurna untuk kemacetan ini!

Saya benar-benar ingin melihat setelah akhir kemacetan apa yang akan muncul dengan orang, dan saya akan menulis posting besar di blog saya merangkum gaya posting lama tentang level pengguna VVVVVV yang pernah saya tulis <3

Bahkan sebelum saya merilis kode sumber untuk game, saya membuka akses gratis ke alat untuk membuat dan menyelesaikan level VVVVVV di versi 2014 Make and Play ! Anda dapat mengunduhnya dari sini! Jika Anda tertarik untuk membuat level di editor VVVVVV, maka Anda bisa mulai dengan topik ini ! Semoga beruntung



Sedikit sentimentalitas


Saya sudah berbicara tentang bagaimana VVVVVV membangkitkan dalam diri saya - tak lama sebelum ulang tahun pertama, saya menulis apa yang saya alami ketika permainan keluar dan bagaimana keberhasilannya mengubah hidup saya . Pada ulang tahun kelima, saya menulis bahwa VVVVVV bagi saya adalah proyek yang hanya terjadi sekali seumur hidup , dan tidak ada yang mendekati sebelum atau sesudahnya.

Sepuluh tahun kemudian, saya masih merasakan hal yang sama. Saya sangat bangga dengan VVVVVV dan berterima kasih atas segalanya. Saya ingin mengucapkan terima kasih kepada semua orang yang membantu saya - Magnus untuk soundtrack-nya yang luar biasa, Ethan dan Simon untuk semua pekerjaan mereka yang membuat game tersedia untuk masyarakat umum, Bennett untuk nama-nama kamar, Stephen untuk membantu menciptakan perakitan untuk Mac pada hari rilis. Game ini spesial bagi saya, terima kasih kepada semua orang yang memainkannya dan mendukung saya selama sepuluh tahun. Itu sangat berarti bagi saya. <3

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


All Articles