4 poin oleh GN⁺ 2024-09-23 | 1 komentar | Bagikan ke WhatsApp
  • Proyek ini bertujuan membuat klon Flappy Bird untuk Android dalam C sambil menekan ukuran APK menjadi di bawah 100KB
  • Setelah mengenal rawdrawandroid pada 2021, pembuat proyek ingin membuat game dengan APK kecil, dan pada September 2024 melihat C# Flappy Bird di Raylib Discord yang memicu percobaan implementasi dalam C
  • Implementasinya menggabungkan library native yang dibuat dengan C ke dalam APK, lalu memadukan OpenGL ES 2, shader, dan Android Native Activity
  • Suara dikompresi dalam format MP3 dan diputar dengan OpenSLES, sementara decoding PNG menggunakan upng
  • Build mendukung Visual Studio Code di Windows dan Makefile di Linux/macOS, serta menyatakan bahwa hak atas game dan resource dimiliki oleh DotGEARS

Tujuan dan latar belakang proyek

  • Flappy Bird in C adalah proyek untuk menulis klon Flappy Bird yang berjalan di Android dalam C dan menjaga ukuran APK tetap di bawah 100KB
  • Titik awalnya adalah rawdrawandroid yang dikenal pada 2021, dengan tujuan membuat game yang tetap mudah dipahami dan menarik sambil meminimalkan ukuran APK
  • Flappy Bird sudah banyak di-port ke berbagai bahasa, jadi secara alami dipilih sebagai target implementasi klon

Percobaan sebelumnya dan masalahnya

  • Pada 2021, pembuat proyek mempelajari Raylib, dan percobaan pertama membuat game dalam C++ dengan ImGui berakhir gagal
  • Masalah saat itu ada beberapa
    • Ukuran APK sekitar 1MB
    • Game mengalami crash
    • APK hanya menyertakan library armeabi-v7a
    • Sesuai persyaratan Google tahun 2022, library arm64-v8a juga harus disertakan

Alasan mencoba lagi pada 2024

  • Setelah melihat C# Flappy Bird di kanal Raylib Discord pada September 2024, pembuat proyek mulai mencoba mengimplementasikan Flappy Bird untuk Android dalam C dan membuat APK di bawah 100KB
  • Targetnya terlihat tidak realistis, tetapi ketertarikan yang kompetitif menjadi pendorong implementasi

Cara implementasi

  • Langkah awalnya adalah mengompilasi Hello World yang ditulis dalam C dan memaketkan library tersebut ke dalam APK
  • Suara dikompresi dalam format MP3 dan diputar menggunakan OpenSLES
  • Untuk decoding file PNG, dipilih upng
  • Grafis dan integrasi Android menggunakan gabungan OpenGL ES 2, shader, dan Android Native Activity

Cara build

  • Di Windows, lingkungan yang dijadikan acuan adalah Visual Studio Code
    • Membuat .env dari .env.example
    • Menjalankan build.bat
  • Di Linux dan macOS, build bisa dilakukan dengan Makefile yang disediakan
    • Perlu memasang Android command-line tools
    • Mengatur variabel lingkungan di file .env pada root proyek
    • Jalankan cd FlappyBird lalu make
  • Untuk prosedur build yang lebih rinci, pembaca diarahkan ke BUILDING.md
  • APK yang sudah ditandatangani dibuat di FlappyBird/app/build/outputs/apk/FlappyBird-signed.apk

Hak cipta dan proyek referensi

  • Penulis proyek menyatakan tidak mengklaim hak cipta, dan bahwa hak atas game serta resource dimiliki oleh DotGEARS
  • Proyek yang menjadi inspirasi adalah sebagai berikut

1 komentar

 
GN⁺ 2024-09-23
Pendapat Hacker News
  • Saya berharap app store punya filter hanya tampilkan aplikasi di bawah 10MB
    Aplikasi yang paling cepat dan minim iklan serta mikrotransaksi biasanya adalah aplikasi kecil
    Kemungkinan besar akan jauh lebih memuaskan mengunduh aplikasi termometer 3MB daripada aplikasi termometer 150MB

    • Dulu ada penerbit di Play Store yang mengunggah aplikasi sangat kecil berukuran satu digit KB seperti senter, sudoku, kalender, tetapi sekarang tidak bisa ditemukan
      Semua aplikasi itu benar-benar kecil, sampai-sampai semuanya di bawah 200KB
    • Ini mengingatkan saya pada salah satu alasan saya berhenti mengembangkan aplikasi mobile
      Perekrut sering meminta hasil karya untuk ditunjukkan seperti portofolio seni, bahkan untuk aplikasi yang sudah tidak ada lagi atau server produksinya sudah mati
      Kriteria yang lebih arbitrer lagi adalah mereka ingin memastikan apakah pernah mengerjakan aplikasi besar, dan kalau membuat paket 8–12MB dengan banyak teknik optimasi yang terlihat kompeten, itu dianggap sebagai sinyal bahwa aplikasi, layanan, dan basis penggunanya kecil
      Padahal sekalipun ada ratusan juta unduhan dan pengguna, itu sama sekali tidak terkait dengan kriteria tersebut, dan di bidang ini insentif untuk membuat aplikasi bengkak sangat besar
    • Saya masih heran bahwa aplikasi Android sering kali jauh lebih kecil
      Misalnya, saya harus mencari sampai 9 kali, termasuk yang berisi iklan, baru menemukan aplikasi termometer yang lebih dari 7MB
      Saya bekerja di kedua platform selama beberapa tahun, tetapi tidak begitu tahu alasan pastinya. Dugaan saya, Android punya tradisi vector art yang jauh lebih kuat daripada bitmap, dan karena stabilitas ABI, library Swift selama beberapa tahun harus dikompilasi bersama aplikasi sampai akhirnya memakai dynamic linking di sisi sistem operasi
    • Bagi saya, lampu merahnya adalah semua aplikasi itu gratis
      Saya berharap bisa memfilter aplikasi yang berbayar, tanpa iklan, dan terkadang juga tanpa pembelian dalam aplikasi
    • Aurora Store setidaknya bisa memfilter berdasarkan berbayar atau tidak, pembelian dalam aplikasi, dan apakah berisi iklan
  • Sedikit menyimpang, tetapi dulu saya pernah menulis tinjauan literatur tentang mengapa orang memainkan Flappy Bird
    Saat itu saya mahasiswa pascasarjana studi game, dan akhirnya tidak masuk dunia akademik, tetapi saya bagikan untuk hiburan
    Untuk yang penasaran, ada di sini [1]
    [1] http://www.fdg2015.org/papers/fdg2015_paper_60.pdf

    • Saya selalu merasa ada sesuatu yang menarik di balik kurva kesulitan Flappy Bird yang terkenal buruk dan layak diteliti lebih dalam
      Di satu sisi, gamenya sendiri sebenarnya tidak punya progres atau peningkatan kesulitan. Skor saat ini 0, 10, atau 100, tingkat kesulitannya tetap sama
      Namun setiap rekor baru menjadi puncak baru yang harus dilewati pemain. Puncak pertama, dan mungkin yang paling menyebalkan, adalah mencetak 1 poin; untuk mencapai skor dua digit, pemain pada dasarnya harus menguasai kontrol inti, termasuk fisika dan timing yang presisi, serta belajar menangani berbagai situasi
      Hambatan untuk mencapai tiga digit ke atas tampak hampir seperti diciptakan sendiri; rasa takut dan tegang saat mendekati rekor pribadi menjadi penghalang terbesar untuk memecahkan rekor
      Begitu rekor itu terlewati, gemetar tangan saat mendekatinya lagi berikutnya seolah hilang secara ajaib, tetapi muncul kembali ketika mendekati rekor baru
      Konsep gameplay dasarnya menipu karena sangat sederhana, tetapi bagi yang mau mengamatinya, ada banyak lapisan untuk diuraikan
    • “Pengondisian diduga diperkuat melalui berbagai bias kognitif yang menipu pemain agar mengharapkan euforia, yaitu jalur liking, padahal yang sebenarnya mereka dapatkan adalah frustrasi. Ketika pengondisian berulang, pemain tersinkronisasi untuk berinteraksi dengan game pada tingkat yang nyaris naluriah. Kami berpendapat bahwa stimulasi jalur wanting ini dapat membuat pemain berinteraksi tanpa benar-benar menyukai game tersebut, dan bahkan tanpa tahu mengapa mereka memainkannya. Pada kenyataannya, hal ini menunjukkan perlunya menarik paralel lain antara kecanduan narkoba dan perilaku bermain yang hampir tidak memperlihatkan liking”
    • Dengan latar belakang itu, kemungkinan besar Anda sudah pernah melihatnya, tetapi tetap saja saya harus memperkenalkan QWOP demi 10 ribu orang yang beruntung
      https://www.foddy.net/Athletics.html
    • Sebagai pakar Flappy Bird, alasannya adalah karena orang menyukai aproksimasi polinomial
  • Kurang dari 4 ribu baris
    457 android_native_app_glue.c
    360 audio.c
    802 game.c
    201 init.c
    93 main.c
    39 mouse.c
    38 shaders.c
    229 texture.c
    1377 upng.c
    27 utils.c
    3623 total

    • Mahasiswa saya mendapat tugas membuat game dengan SFML, dan menulis klon Flappy Bird dalam sekitar beberapa ratus baris
      Programnya memang tidak serumit itu, jadi jujur saja menurut saya 4 ribu baris juga terlalu banyak
    • Sayang sekali ketika kode 4 ribu baris dikompilasi, hasilnya menjadi binary lebih dari 100KB
  • Pada 2020 saya membuat sesuatu yang mirip dengan Nim dan merilisnya, meski grafisnya kurang cantik
    Perbedaannya adalah saya masuk lebih dalam dan benar-benar menulis assembler untuk Dalvik bytecode dan file .apk
    https://www.youtube.com/watch?v=wr9X5NCwPlI&list=PLxLdEZg8DR...
    Sayangnya kode di repositori sudah rusak seiring waktu, dan sesekali saya berpikir untuk menghidupkannya kembali suatu hari nanti
    Kadang ada aplikasi sederhana yang terlintas di kepala dan seandainya itu sedikit lebih dipoles, saya bisa membuatnya dengan mudah

  • Benar-benar keren
    Senang melihat aplikasi Android di bawah 1MB berjalan di mana-mana, bahkan di HTC lama

    • Akan bagus juga kalau ada evaluasi tentang seberapa besar peningkatan kecepatannya
  • Saya kira untuk membuat APK Android perlu kode penghubung Java, jadi senang melihat proyek ini
    0 file Java itu keren
    Proyek rawandroid yang disebut orang lain juga layak dilihat
    https://github.com/cnlohr/rawdrawandroid/tree/master

  • Super Mario Bros ukurannya hanya 40KB
    https://news.ycombinator.com/item?id=21213421

    • Itu juga dibuat untuk berjalan pada tepat satu spesifikasi hardware, praktis tanpa sistem operasi
      Kloning Flappy Bird ini berjalan di perangkat yang jumlahnya tak terhitung dengan konfigurasi hardware dan software yang bermacam-macam
  • Karena muat di disket floppy 3,5 inci, mereka melewatkan kesempatan menamainya Floppy Bird

    • Saya juga terpikir begitu, tapi sayangnya beberapa kloning sudah lebih dulu memakai nama itu
      Yang paling menonjol adalah versi reskin sederhana yang memakai ikon disket floppy sebagai pengganti burung
    • Di Argentina, semua orang menyebutnya ‘floppy beard’
      Tentu saja ‘angry birds’ jadi ‘ongry beards’
  • Apakah teknik membuat aplikasi C untuk Android dengan rawdrawandroid ini bisa diterapkan juga ke framework C lain seperti raylib?
    Dan lewat Termux, bisakah sistem pengembangan ini dipakai untuk membuat lingkungan pengembangan C untuk Android di atas Android?

    • Bisa. raylib mendukung Android
      Saya punya skrip build yang agak belum rapi untuk proyek raylib saya
      Tentu saja, penandatanganannya perlu ditangani lebih benar, Anda mungkin ingin membangun target selain aarch64, dan SDK Anda juga belum tentu terpasang di /home/denis
      Selain itu, saya tidak yakin apakah cara menambahkan file .so ke apk ini adalah cara yang disukai Android modern, tetapi sejauh ini masih berfungsi
      https://gist.github.com/deniska/f1ee73e18e1444eb724c01f933b6...
  • Kalau “untuk Android”, berarti bisa memakai Java, dan bytecode bisa sangat padat, jadi sepertinya masih bisa dibuat lebih kecil