Tuesday, 24 January 2012

Ace Core: The Truth of Ace


Well just as title said, this post is about our (yes, "our" not "my") recently published J2ME game: Ace Core. We made this game for Agate Studio: Game Development War 2. Truth be told, I'm more excited about the game than about the competition. Since I had a grand idea on my mind!

So the game concept is quite simple. Armored Core + Ace Combat (that's the very reason we call it Ace Core!). We want to combine Armored Core's garage concept where you can assemble your own battle unit on your own from parts and Ace Combat's exciting missions where you should watch your enemies and comrades closely, on air or land. The game itself would be presented in 3D and that's the reason I'm preparing my own Android 3D framework (it's not done yet).

We entered Agate's competition so we had deadlines hanging on our head and we would be motivated to make the game. And for this competition, I made a lot of changes to the idea, and still hoping players would feel the existence of Armored Core here. We made the game as a Shoot'em Up game instead of 3rd person shooting or RTS. We made the game in 2D so we could make it faster so we could meet the deadlines. But we kept the garage concept where players can make their own ship (or battleship, or  even mothership) so players could see the resemblance of the game with Armored Core.

Yet because of time limitation, we can't make the game as awesome as I thought it could be. Given 2-3 months and a lot of feedback, I believe this game can be quite awesome! Here's some screenshot :)

Main Menu. Nice background found by Timmy :)

Profile selection. I want to add "console"-feelings here so people would feel like playing in a console instead of in his phone.

Garage. I think this is the main fun of the game. Just think how you could plan ahead for missions and winning them because you make the right choice of weapons.

The game. I want to make it as simple as Geometry Wars with stunning graphics and particles here and there, but failing at doing them. Mainly because I can't draw. Secondly, because J2ME doesn't support alpha and rotation.

Achievements. Haven't really thought about it.


Some problems we encountered while making this game: the game running quite slow. There're a lot of changes on data structures and algorithms used during the creation of this game. But I still had to keep them simple so I could port them to Android and iOS easily if I had the time. The other is contents. I can't made this Shoot'e up game as awesome as Touhou or Bullet Dance. One reason is J2ME doesn't support continuous image rotation (just look at Touhou, the bullet is rotating like crazy). The missions are too easy, still far from what I want them to be: hard, vary and balanced.

And BTW, who are "we"? We are me and one of the most awesome friend I've ever made, Timmy. Note that "awesome" here has a lot of meanings. Both of us doing the role of programmer and graphic designer. And we're part of the awesome Dongskar Pedongi team (just google it, we're awesome). Other members of Dongskar Pedongi are Karol, Ronny, Irvan, Raka, Kavin and Chris.

BTW again, why is the post in English? So we can pass Nokia Quality Assurance for the game :P

Wednesday, 4 January 2012

Happy New Year

Phew setelah selesai ngerjain dokumen Tugas Akhir 1 (yang sebenarnya 10% selesasi aja ngga), akhirnya jadi pingin nulis tentang masa-masa bahagia yang membuat aku tidak ngerjain Tugas Akhir: New Year di Yogya. Ya, those 9 days were awesome (atau sebenernya biasa saja, cuma karena sudah lama ga liburan jadi berasa awesome)

Dimulai dari tanggal 23, berangkat dari Bandung bareng Randi, Rhesa, Audri dan Alwi. Malemnya ga tidur main DoTA lawan AI pakai Kunka; mencoba nge-one-hit-kill 5 hero; yang akhirnya ga kesampaian karena keburu menang padahal Rapier-nya baru 1. Ngga tidur karena takut Randi nungguin kalau kebablasan tidur (aku tau Rhesa dan Audri pasti baru bangun pas disamperin Randi, tapi tetep aja ga enak ma Randi). Dan ternyata kita tetap nungguin karena Alwi cukup lama siap-siapnya.

Perjalanannya sendiri cukup menyenangkan. Kita main beberapa sesi "Sampe Gayung" (pleset-plesetan kata sampe katanya jadi "gayung") yang cukup menyenangkan dan memakan waktu. Aku, Alwi dan Randi ga tidur selama perjalanan (new record!). Perjalanannya menghabiskan 13 jam, dengan 2 kali istirahat, 1 kali buat ngalay dan berjemur, 1 kali buat makan siang + malam. Perjalanan ini disponsori oleh Tango dan Vitacimin.

Besoknya ketemuan sama temen-temen SMA. Kita ketemuan di Galeria (yang perjalanannya menghabiskan waktu 1 jam; yang biasanya cuma 20 menit; dan parkirnya menghabiskan waktu 1/2 jam; yang biasanya cuma 5 menit) hanya untuk memutuskan akan makan di Phuket. Makannya bareng Nana, Sito, Yosua, Stanis, Nina, me, Rhesa, Audri, Dhani, Randi, Sisca dan Adrian. Makannya disponsori oleh Adrian (orang Australi memang beda). Habis makan kita karaoke!! Terus malemnya dihabiskan dengan mencari ronde.

Tanggal 25, natalan. Kita menghabiskan hari ini dengan mancing! Cuma ada 2 pancing, padahal yang mancing ada 4: Alwi, aku, Rhesa dan Randi. Akhirnya aku dan Alwi yang mancing terus-terusan. Rhesa tidur (seperti biasa); Randi dengan ajaibnya dapat pancing lagi; sementara aku dan Alwi mancing yang ga dapet-dapet ikan (dapet sih, cuma kecil banget). Ditengah kita mancing Mas dan Mbak Pon (pacarnya) datang untuk makan. Makannya disponsori oleh Mas (dengan bonus duren).

Lalu saat umpan kita sudah mulai habis, Randi menemukan inovasi: nyiduk ikan kecil untuk jadi umpan! Was an awesome idea! Ikan umpan pertama lolos. Namun ikan umpan kedua yang berhasil diciduk oleh Rhesa (bukan dari alam mimpi, dia sudah bangun ceritanya) berhasil memancing 1 ikan yang cukup besar. Alhasil kita dapat 2 ikan, 1 ikan yang berhasil kupancing dengan umpan dari Rhesa, dan 1 ikan bonus yang cara mendapatkannya tidak perlu dijelaskan.

Setelah mancing, kita njemput Gugel. Habis njemput Gugel kita cari ronde lagi. Kali ini sampai Kaliurang (Taman Bermain Kaliurang). Kita main 100 (baca: Cepek) disini yang cukup seru dan memakan waktu (Bayangkan 3 jam hanya untuk minum ronde). Disini cukup banyak silih berganti cewek cakep ikut nge-ronde bareng kita. Btw ronde-nya mantap loh. Cuma 5000an dan enak banget. Jagung bakarnya juga enak. Cuma 4000an. Dulu waktu di SMP cuma 1000an dan lebih besar >.<. Pulangnya kita menjemput Audri lalu main HoN (in which kita kalah terus).

Tanggal 26, kita ke pantai. Pesertanya Gugel, aku, Alwi, Rhesa, Randi, Nina, Audri, Adrian dan Pak Supir yang Sedang Bekerja Mengendarai Mobil Supaya Baik Jalannya. Perjalanannya cukup melelahkan karena kita 4 orang (aku, Gugel, Alwi dan Rhesa) duduk dibelakang yang dimana sebenarnya dibelakang tidak terlalu muat untuk kita ber-4 (aku dan Alwi ganti2an senderan ke kursinya). Kita ke Indrayanti untuk melihat limbah. Oke, bukan untuk melihat limbah. Namun yang paling berkesan dari perjalanan ke Pantai Indrayanti ini adalah limbah manusia langsung dialirkan ke laut.

Setelah itu kita pergi ke Krakal..... or so we said. Ternyata kita malah pergi ke Sundak. Close enough.

Di Sundak kita cari makan. Sambil nunggu makanan jadi, kita main Jungle Speed. An awesome game. Super awesome. Game yang sangat menyenangkan. Intinya permainan ini memerlukan mata yang jeli, tangan yang cepat dan kuat, refleks yang bagus, serta pinggang yang kebal di-kilikitik. Makanannya pun enak. Es jeruk cuma 2000 perak (wow mahal donk, 2000 rupiah deh....).

Pulangnya kita tewas...

Tanggal 27. Aku dipingit; harus njagain Mami dirumah. Alhasil untuk pertama kalinya dalam beberapa hari terakhir aku ngoding. Sedikit benerin Ace Core, banyak main HoN (woi HoN bukan ngoding) dan latihan main piano dan nyanyi untuk perform pas tunangannya Mbak Lintang.

Hal yang berkesan pada hari ini adalah ngantri. Iya ngantri. Literally. Jadi ceritanya Mami harus pijet biar sehat. Tempat pijetnya super populer. Alhasil tempatnya jadi super ramai. Tugasku adalah ngantriin Mami biar Mak ga usah ngantri lama-lama disana ntar. Setelah digambarin peta oleh Mbak Lintang, aku berangkat ketempatnya. Sekali jalan, nggak nyasar sama sekali. F*** yea.

Tempatnya sebenarnya cukup terpencil. Tapi rumahnya sendiri cukup bagus (mungkin kaya gara-gara penghasilan pijet), dan sudah cukup banyak orang ketika aku sampai disana. Dengan amunisi sebuah laptop dan sebuah Android, disana ngerjain Tugas Akhir sambil ngantri selama 2 jam. Hari yang cukup produktif!

Tanggal 28. Dipingit lagi. Atau lebih tepatnya memingitkan diri. Tanggal 28 aku ngansos saja dirumah sambil ngerjain Ace Core dan Tugas Akhir. Sedikit ngerjain proyek Zing tapi akhirnya males juga. Akhirnya banyak2nya malah main HoN dan main piano. Hari ini bisa dibilang hari yang paling tidak berkesan.

Tanggal 29. Bikin KTP. KTP ku hilang karena dimaling dulu waktu internship di US. Mulai dari jam 8 pagi, dan selesai jam 1 siang. Harus muter2 untuk fotokopi dan minta tanda tangan Kelurahan. Kebalikan dari yang tertulis, hari itu cukup fun.

Habis bikin KTP lanjut ke rumah Adrian. Konon katanya aku dicariin sama Stanis dan Yosua. Dan benar saja ditempat Adrian sudah ada 4 makhluk hikikomori dengan nama Adrian, Stanis, Yosua dan Rhesa. Mereka lagi mainan laptop.

Yang menyenangkan di rumah Adrian adalah main Armored Core. Akhirnya aku bisa main game ini lagi. Selain bisa jadi referensi terhadap Ace Core (game yang sedang aku buat yang memang based on Armored Core), game ini adalah salah satu game favoritku (karena aku cukup jago main game ini :P). Dalam satu hari aku berhasil menamatkan game ini. Btw malemnya makan di Super Sambal. Ikan asinnya enak.

Tanggal 30, ngansos lagi di rumah. Hari ini cukup frantik latian buat perform untuk tanggal 31. Frantik juga ngerjain Tugas Akhir yang belum jadi apa-apa padahal deadlinenya tanggal 2 Januari dan dah janji akan ngirim progress sekali lagi terlebih dahulu sebelum tanggal 2 Januari.

Hari ini (tanggal 30) ngantri lagi buat Mami. Tapi kali ini ngantrinya cuma 1/2 jam karena cuma ada 2 orang disana. Dan hari ini baru ingat kalau kemarinnya (tanggal 29 Desember) adalah ulang tahun pernikahan Papi dan Mami. Memang anak durhaka.

Tanggal 31, the day has come. Hari ini super capek. Dari menyambut saudara2 yang pada dateng ke acara tunangannya Mbak, memastikan listrik dan sound system nyala, menyambut tamu dan nyuruh mereka ngisi kartu kedatangan, dan yang terpenting: perform. Ini pertama kalinya aku perform sejak pertama kali aku belajar musik sejak tahun kedua kuliah. Perform-nya sama Mas Dias, calon suaminya Mbak Lintang. Orangnya baik banget loh, dan suaranya bagus banget. Agak kecewa waktu perform gak dapet microphone buat nyanyi, tapi seneng juga karena nggak merusak suaranya Mas Dias.

Sorenya langsung pergi kerumah Adrian. Jalan Kaliurang macet parah. Sampai di rumah Adrian "diusir" untuk jemput Gugel, beli kembang api dan cari minuman. Kita dapet kembang api yang cukup murah dan banyak (walau kualitasnya sangat cupu).

Malemnya kita main Jungle Speed. Ada 2 sesi, yaitu sesi cewek dan sesi cowok (karena agak gak adil kalo cowok main sama cewek secara permainannya memerlukan "tenaga"). Dan untuk kedua sesi, permainan ini berlangsung sangat seru. Main Jungle Speed dari jam 8 sampai jam 10 malam.

Lebih malem lagi kita main Werewolf. Untuk pertama kalinya akhirnya bisa main Werewolf. Dari dulu cuma pernah diceritain sama Ronny dan Gugel. Turns out another awesome game! Kita main Werewolf dari jam 10 sampai jam 12 malam. Yang main adalah Wikan, Tata, Gugel, Rhesa, Adrian, Audri, Gaby, aku, Stanis, Yosua, Kiki, Nina, Gilda, dan Ajeng.

Habis itu main kembang api. Adrian berpesan bahwa kita tidak boleh main kembang api yang meledak-meledak karena tetangganya banyak yang sepuh. Akhirnya kita hanya main kembang api kembang dan air mancur. Karena belinya banyak banget, kita sampai bikin api unggun dari kembang api itu.

Selesai main kembang api, kita lanjutkan dengan main Werewolf. Walau sudah pada ngantuk, permainan tetap berlangsung dengan seru. Kita main sampai jam 4 pagi.

Bangun pagi, lalu...tidur lagi. Semua baru siap bangun untuk bergerak jam 11 siang. Adrian main Dragon Ball dimana Yajirobe adalah tokoh ter-imba karena dia bisa menyembuhkan dirinya sampai penuh menggunakan Senzu Bean. Kita nge-brunch (breakfast + lunch) Soto Sawah.

Sebenarnya banyak yang ingin diperdetail dari tulisan ini namun bisa saja ada yang tidak berkenan :P. Dan... yah begitulah akhir tahunku yang singkat namun sangat menyenangkan. Bagaimana dengan akhir tahun anda?

Tuesday, 11 October 2011

Work Performance

Dah lama sebenernya pingin bikin perbandingan performa kerja manusia. Cuma baru sekarang ini punya niat untuk bikin nulis. Haha...

Orang bilang gambar memiliki arti lebih dari sejuta kata (atau kalimat?). Jadi daripada menuliskan perbandingan secara tulisan, sepertinya akan lebih menarik kalau digambar aja.

Berikut perbandingan performa kerja manusia in my point of view. Maap gambarnya abal, cuma pake paint dan mouse ajah.



Professional
Non-professional
Hard Worker

Smart Worker
Perfectionist
Fail-Perfectionist
Gabut

Soloist
Deadliner

Tugas akhir
McD


Pisang

 Pesan dari saya: "be smart, be professional" dan jangan lupa makan pisang habis makan McD.



Friday, 2 September 2011

Manga Mobile Coding Series : Membajak mangareader.net part 1

Akhirnya sempet nulis lagi. Sekarang saya mau membahas tentang bagaimana cara saya membajak manga yang ada di Mangareader (dan bisa juga digunakan di online manga reader lain seperti Mangafox, AnimeA, atau Batoto). Kalo di kuliah yang saya ikuti di kampus, teknik ini disebut Page Scrapping.


Warning: untuk bisa mengerti dengan sepenuhnya apa yang dibahas di artikel ini, anda perlu mengenal beberapa hal yang tidak dibahas di artikel ini:

  1. DOM (Document Object Model)
  2. Manga :)

Page Scrapping adalah teknik mengambil data dari sebuah website. Banyak sekali data yang bisa kita dapatkan dari sebuah website, mulai dari judul website, informasi yang secara eksplisit ditawarkan di website, informasi pemilik website dan informasi yang implisit diberikan di website. Disini saya menggunakan informasi yang tidak terlalu eksplisit, tapi tidak implisit juga (jadi sedang-sedang saja).

Pertama, mari kita perhatikan halaman daftar manga pada Mangareader. Disana kita akan melihat daftar manga yang sudah urut abjad. Ya, bila kita lihat source code nya (Ctrl + U pada browser anda untuk pengguna Windows dan Linux), kita bisa melihat URL dari manga yang bersangkutan (dan lagi-lagi sudah diurutkan abjad). Sangat menarik!


Manga List pada Mangareader

Source code-nya Manga List pada Mangareader

Tujuan kita adalah mendapatkan URL dari suatu manga tertentu (sebagai contoh 5 Centimeter per Second), lalu membuka URL tersebut, dan mendapatkan URL ke chapter yang dimaksud (sebagai contoh chapter 3). Setelah berhasil membuka halaman chapter yang sekaligus adalah halaman pembaca, kita perlu mendapatkan URL gambar untuk suatu halaman (sebagai contoh halaman ke 20).

Source code-nya suatu manga di Mangareader

Source code-nya suatu chapter alias Manga Viewer di Mangareader

Lalu bagaimana kita bisa mendapatkan URL-URL tersebut sedangkan di halaman tersebut terdapat banyak sekali informasi lain (seperti iklan, ads, dan iklan)? Pertama kita harus mengetahui pola dari halaman yang kita unduh. Akan saya contohkan bagaimana saya mendapatkan URL manga-manga dari manga list.

Perhatikan bahwa kita membutuhkan nilai href dari suatu link (a). Elemen a selalu didahului dengan sebuah unordered list ul yang memiliki class = series_alpha. Sehingga kita bisa membuat logika umum seperti berikut:

"Dari halaman yang berhasil diunduh, carilah semua elemen ul. Dari semua elemen ul yang ada, pilihlah elemen yang memiliki class=series_alpha. Untuk tiap elemen yang sudah tersaring tersebut, ambillah anak pertamanya, yaitu sebuah elemen a. Setelah mendapat elemen a, dapatkan nilai href-nya"

Hal yang perlu diwaspadai adalah apabila si pemilik halaman web (dalam kasus ini Mangareader) cukup "canggih". "Canggih" disini adalah apabila mereka mengganti pola penempatan URL mereka secara berkala. Contoh website manga yang cukup "canggih" untuk melakukan itu adalah Mangastream.

Pada artikel berikutnya, saya akan membahas bagaimana melakukan hal ini di Android.

Seperti biasanya, kritik dan saran sangat diterima.