BAB III PERANCANGAN SERVER MMOG 3.1
Deskripsi dan Analisis Game Sultan Agung
Game Sultan Agung merupakan sebuah game RTS yang mengimplementasikan kisah perang Sultan Agung untuk mempersatukan nusantara dan mengusir VOC dari Batavia. Pada game ini pemain harus menyusun strategi untuk memenangkan perang pada tiap level. Tiap level harus dimenangkan sesuai ketentuan masing-masing level untuk menuju level berikutnya yaitu menguasai daerah lain di nusantara hingga level terakhir untuk menguasai Batavia dan mengusir VOC dari nusantara.
A. Interaksi Pengguna Interaksi pengguna pada game Sultan Agung menggunakan keyboard dan mouse sebagai alat kontrol. Keyboard digunakan untuk hal-hal sebagai berikut :
memilih menu,
mengatur tampilan layar,
menampilkan peta, dan
dapat digunakan sebagai shortcut untuk fungsi-fungsi dalam game.
Mouse digunakan untuk hal-hal sebagai berikut :
memilih menu,
pemilihan obyek dan karakter,
pergerakan karakter,
menempatkan obyek, dan
mengatur strategi
B. Obyek dan Karakter Game Sultan Agung memiliki beberapa obyek dan karakter yang mendukung alur cerita tiap level game. Obyek pada game ini terbagi menjadi 5 (lima) bagian dengan perincian sebagai berikut. 26
1. Bangunan terdiri dari keraton, menara bertahan, barak, pandai besi, peternakan, dan pertanian. 2. Senjata terdiri dari tombak, pedang, panah dan perisai. 3. Kendaraan terdiri dari kuda dan pedati. 4. Lingkungan terdiri dari hutan dan air (laut dan sungai). 5. Sumber daya terdiri dari batu, kayu, emas, dan makanan (peternakan dan pertanian). Karakter yang ada pada game ini adalah sebagai berikut : 1. Sultan Agung, 2. Bupati, 3. Prajurit penombak, 4. Prajurit pemanah, 5. Prajurit pedang, 6. Prajurit berkuda, dan 7. Pekerja. Setiap karakter tersebut mempunyai atribut sebagai berikut. 1
ID, yaitu nomor identitas suatu karakter.
2
Kelas, yaitu kelompok karakter terdiri dari prajurit dan pekerja.
3
Hit point (HP), yaitu nilai yang menyatakan kekuatan karakter.
4
Kecepatan, yaitu nilai untuk kecepatan berlari atau berjalan.
5
Keahlian, yaitu keahlian suatu karakter.
6
Daya hancur, yaitu nilai yang dapat mengurangi HP.
7
Posisi karakter, yaitu posisi karakter pada virtual world.
8
Target posisi, yaitu tujuan pergerakan karakter.
9
Unit reference (UR), yaitu referensi ke unit lain.
C. Level Game Game ini dimulai dengan sultan Agung yang dinobatkan menjadi raja Mataram, membangun
keraton
Mataram,
membangun
pertanian,
pertambangan,
dan
peternakan. Level battle pada game ini meliputi pengaturan strategi, perpindahan 27
karakter, dan penerapan AI untuk tiap karakter. Tiap level pada game ini mempunyai 5 tingkat kesulitan yaitu sangat mudah, mudah, normal, sulit dan sangat sulit. Tingkat kesulitan ditentukan berdasarkan jumlah prajurit dan ketersediaan sumber daya. Pada setiap level terdapat kondisi menang dan kalah dengan ketentuan yang berbeda pada tiap level. Pada gameplay terdapat beberapa panel yaitu panel resource, panel karakter, dan panel bangunan. Berikut ini adalah penjelasan masing-masing panel. 1
Panel resource. Panel ini menampilkan informasi jumlah resource (sumber daya) yang diperoleh seperti emas, jumlah batu, jumlah kayu, dan jumlah makanan. Emas dan batu diperoleh dari hasil pertambangan, kayu diperoleh dari hasil penebangan pohon, dan makanan dihasilkan dari pertanian dan peternakan. Jumlah masing-masing resource akan berkurang ketika digunakan untuk membuat bangunan dan memproduksi prajurit/pekerja. Makananan akan berkurang secara periodik yang jumlahnya disesuaikan dengan jumlah unit karakter.
2
Panel karakter. Panel ini menampilkan informasi atribut prajurit atau pekerja yang dipilih oleh pemain
dan menampilkan beberapa command icon (ikon perintah) untuk
pemberian perintah seperti move untuk perpindahan posisi, attack untuk menyerang, dan stop untuk menghentikan semua perintah. Khusus untuk karakter pekerja terdapat beberapa command icon tambahan seperti build untuk perintah membuat bangunan, mine untuk perintah menambang emas dan batu, harvest wood untuk perintah menebang kayu, dan cancel untuk membatalkan semua perintah. 3
Panel Bangunan. Panel ini menampilkan informasi atribut bangunan dan beberapa command icon sebagai berikut.
Keraton mempunyai command icon worker produce untuk memproduksi pekerja dan meeting point untuk area berkumpul pekerja.
28
Barak mempunyai command icon untuk produksi prajurit tombak, prajurit panah, prajurit pedang, dan prajurit berkuda, dan command icon meeting point untuk area berkumpul prajurit.
Menara bertahan mempunyai command icon untuk aktifasi penyerangan otomatis ketika ada musuh yang datang.
Pandai besi mempunyai command icon untuk produksi tombak, pedang, panah dan perisai.
Peternakan mempunyai command icon untuk produksi sapi dan kuda.
Pertanian mempunyai command icon untuk penanaman dan panen padi.
Panel resource
Informasi unit
Panel karakter dan bangunan
Gambar 3.1 Panel game Sultan Agung.
D. Detil Level Level-level yang ada pada game Sultan Agung ini adalah sebagai berikut. 1
Level 1: Invasi Lasem. 29
Pada level ini menggambarkan perjuangan Sultan Agung untuk menguasai Lasem yang terjadi tahun 1614. 2
Level 2: Invasi Blambangan. Pada level ini menggambarkan perjuangan Sultan Agung untuk menguasai wilayah lain di jawa Timur yaitu Blambangan yang terjadi tahun 1615.
3
Level 3: Invasi Tuban. Pada level ini mengimplementasikan invasi Mataram untuk memperluas wilayahnya dengan menundukkan Tuban yang terjadi tahun 1616.
4
Level 4: Invasi Pasuruan. Pada level ini menggambarkan invasi Mataram ke Pasuruan terjadi pada tahun 1617.
5
Level 5: Pemberontakan Pajang. Pada level ini menggambarkan perjuangan Sultan Agung dalam penumpasan pemberontakan Pajang terhadap Mataram terjadi tahun 1617.
6
Level 6: Invasi Madura. Pada level ini menggambarkan invasi Mataram untuk memperluas wilayahnya dengan menguasai Madura terjadi tahun 1619.
7
Level 7: Invasi Surabaya. Pada level ini menggambarkan keinginan Sultan Agung untuk mempersatukan nusantara di bawah kerajaan Mataram dengan menguasai Surabaya tahun 1624.
8
Level 8: Penyerangan Batavia I. Pada level ini menggambarkan penyerangan mataram ke Batavia untuk mengusir VOC dari bumi nusantara melalui jalan laut terjadi tahun 1628.
9
Level 9: Penyerangan Batavia II. Pada level ini menggambarkan penyerangan terakhir Mataram ke Batavia untuk mengusir VOC dari bumi nusantara melalui jalan darat terjadi tahun 1629.
Pengguna dapat memenangkan permainan jika kondisi semua bangunan musuh telah dimusnahkan. 30
E. Mode Game Mode game yang akan diterapkan pada game Sultan Agung ini terdiri dari Mode Legenda yaitu game single user yang dimainkan secara berurutan dari level 1 sampai level 9 yang bercerita tentang sejarah perjuangan Sultan Agung dalam mempersatukan nusantara. Mode Pilihan yaitu game single user dengan level yang dapat dipilih oleh user. Mode Jaringan yaitu mode game multi user yang dimainkan melalui jaringan LAN. Dalam mode jaringan, yang menjadi musuh adalah user lain yang ikut bergabung dalam game ini. F. Efek Visual dan Efek Suara Pada game ini ditambahkan efek visual dan efek suara agar permainan tampak lebih nyata dan menarik. Beberapa efek visual yang ditambahkan pada game ini antara lain :
efek ledakan,
efek bayangan,
efek kabut, dan
efek gelombang air.
Efek suara yang ditambahkan dalam game ini meliputi :
suara pedang,
suara panah,
suara tombak,
derap kuda,
karakter mati, dan
karakter berjalan/berlari.
3.2
Model MMOG
A. Model Jaringan MMOG Server MMOG yang akan dibuat, dirancang untuk dapat melayani minimal 1000 pengguna dan dapat dimainkan di jaringan lokal (LAN) maupun di jaringan global (internet), seperti tampak pada Gambar 3.2. 31
Server
Player 1
Player 2
Player 3
Player n
Gambar 3.2 Model jaringan MMOG.
B. Model Aplikasi MMOG Model aplikasi MMOG menggambarkan hubungan interaksi pengguna dengan aplikasi game client dan administrator dengan aplikasi game server, antara game client dengan game server dihubungkan dengan jaringan seperti tampak pada Gambar 3.3. Administrator bertugas untuk mengaktifasi game server, melakukan setting konfigurasi game dan memonitor jalannya game. Pengguna yang ikut bergabung ke dalam game MMOG terlebih dahulu harus melakukan lobby koneksi ke game server. Jika permintaan koneksi diterima, maka game server akan mengirimkan inisialisasi data ke game client, selanjutnya pengguna dapat ikut bermain game online yang dapat berinteraksi dengan pengguna lainnya secara real time. Game server mempunyai peranan penting dalam menangani proses lobby pengguna, simulasi game dan komunikasi. Data hasil simulasi game server akan dikirim terus menerus secara periodik ke game client sehingga kondisi pada game client akan selalu diperbaharui sesuai dengan kondisi game server. Dengan cara seperti ini, maka pengguna yang memainkan game dapat berinteraksi dengan pengguna lainnya secara real time. 32
Game Client
Pengguna
Game Server
Administrator
Gambar 3.3 Model aplikasi MMOG.
Server memiliki tugas untuk menjalankan keseluruhan simulasi yang terjadi pada game. Sedangkan, client memiliki tugas utama untuk memvisualisasikan
permainan sebagai
fasilitas untuk interfacing dengan pengguna.
3.3
Arsitektur Server MMOG
Arsitektur yang akan digunakan pada aplikasi server MMOG ini adalah arsitektur client-server yaitu semua proses komunikasi terpusat pada satu server. Setiap client hanya dapat mengirim pesan ke server, server melakukan agregasi keadaan dan mengirimkan kembali ke semua client. Arsitektur client-server memiliki beberapa keuntungan antara lain mempercepat proses komunikasi, menghemat bandwidth, dan konsistensi data yang tinggi. Arsitektur client-server juga sangat memungkinkan terjadinya delay yang lama akibat banyaknya antrian, terjadinya kemacetan transmisi
33
dan loss data. Sehingga kebanyakan aplikasi MMOG yang menerapkan arsitektur client-server menggunakan dedicated server dan membutuhkan manajemen server. Arsitektur seperti tampak pada Gambar 3.4 menunjukan hubungan antara game client dengan game server melalui komponen network. Game client terdiri dari komponen user interface, AI, graphics, sound, dan network yang semuanya saling berhubungan melalui komponen logic engine. Pada game server tidak hanya terdiri dari komponen network dan logic engine saja, tetapi ditambahkan juga komponen AI. Komponen AI ditambahkan karena game seringkali menggunakan estimasi logika di dalam game server untuk menjaga game client dapat disinkronisasikan dengan layak. Dalam tesis ini tidak semua komponen dibahas, pembahasan yang rinci ditekankan pada komunikas jaringan antara server dan client.
Client :User Interface
Client
:Artificial Intelligence
Logic Engine
:Audio
:User Interface
:Network
:Network
:Graphics
Logic Engine
:Artificial Intelligence
Logic Engine
:Audio
:Network
:Artificial Intelligence
Server
Gambar 3.4 Arsitektur client-server MMOG[14].
34
:Graphics
3.4
Spesifikasi Kebutuhan
Spesifikasi kebutuhan server MMOG terdiri dari 3 (tiga) kelompok yaitu kebutuhan jangkauan (scope) dan kompleksitas aplikasi, kebutuhan resource eksternal, dan kebutuhan fungsional.
A. Scope dan Kompleksitas Aplikasi Scope aplikasi server MMOG meliputi : 1. aplikasi server MMOG digunakan untuk melayani kebutuhan game RTS supaya dapat dimainkan oleh banyak pengguna secara bersama-sama di level global (internet), 2. aplikasi server MMOG dirancang untuk dapat melayani minimal 1000 pengguna dalam waktu bersamaan, 3. simulasi game dilakukan di server, oleh karena itu aplikasi server MMOG membutuhkan AI. B. Kebutuhan Resource Eksternal Kebutuhan resource eksternal meliputi : 1. antarmuka pengguna, yaitu menggunakan mode teks (console) dimana pengguna berinteraksi dengan aplikasi server menggunakan keyboard untuk menuliskan command line, 2. perangkat keras, yaitu dianjurkan menggunakan komputer dedicated server dengan multi-processor Intel Pentium Xeon 3.0 Ghz, memory 1 GHz, dan Gigabit ethernet card, 3. sistem operasi, yaitu aplikasi berjalan dilingkungan sistem operasi Windows. C. Kebutuhan Fungsional Fungsi-fungsi yang dibutuhkan oleh aplikasi server MMOG adalah sebagai berikut : 1. fungsi untuk melakukan konfigurasi sistem yang terdiri dari inisialisasi network dan inisialisasi game settings, 2. fungsi untuk mekanisme lobby yang terdiri dari fungsi untuk melakukan joint ke game server, otorisasi koneksi, dan fungsi untuk loading data, 35
3. fungsi untuk simulasi game yang terdiri dari simulasi AI, simulasi virtual world, update network, dan fungsi untuk sinkronisasi, 4. fungsi untuk melakukan komunikasi yang terdiri dari fungsi untuk merespon pesan yang datang, membentuk daftar pesan jaringan, dan fungsi untuk mengirimkan pesan. Kebutuhan fungsi-fungsi tersebut akan diperinci menggunakan diagram use case dan sequence yang akan dibahas pada sub bab tersendiri.
3.5
Use Case dan Sequence Diagram
A. Use Case Setup Konfigurasi
Inisialisasi network
Administrator
Inisialisasi game setting
Gambar 3.5 Use case setup konfigurasi.
Setup konfigurasi berfungsi untuk melakukan inisialisasi awal pada saat game dijalankan. Fungsi ini terdiri dari proses inisialisasi network dan inisialisasi game setting yang dilakukan oleh administrator.
Table 3.1 Use case inisialisasi network. Use Case Name : Inisialisasi network Player (Actor) Context (Role) : Administrator Preconditions : Aplikasi server telah dijalankan Triggers : Administrator menuliskan perintah setIP pada comman line (console). Main Course of Action : - Administrator memilih network interface yang akan digunakan untuk komunikasi data dengan cara menuliskan alamat IP. - Sistem akan melakukan inisialisasi network dengan membuat socket, binding ke port tertentu dan registrasi ke alamat multicast group. Exceptional Courses of Action : - Inisialisasi network gagal jika alamat IP yang diberikan tidak terdapat pada salah satu network interface
36
: Administrator
: NetworkManager
: NetworkInterface
: ServerInterface
: Socket
: Ip
&getInstance( ) init() setSourceIP(string) Ip(string) create create create getIp( ) init( ) setAddress() bind() joinMulticastGroup() *getSocket( ) *getSocket( ) *getServerInterface( )
Gambar 3.6 Sequence inisialisasi network.
Pada saat game dijalankan, sistem akan membuat instan kelas NetworkManager, kemudian administrator memberikan alamat IP ke dalam sistem, selanjutnya dibuat instan
kelas
NetworkInterface,
ServerInterface,
dan
Socket.
Instan
kelas
ServerInterface melakukan inisialisasi pada instan kelas Socket yaitu melakukan pendefinisian alamat IP, melakukan binding soket pada port tertentu, dan melakukan registrasi pada alamat IP multicast. Tabel 3.2 dan Gambar 3.7 menjelaskan proses inisialisasi
game setting oleh
administrator. Administrator memberikan nama file map dalam format eXtensible Markup Language (XML), kemudian sistem akan membaca file map tersebut dan menyimpannya pada kelas GameSettings. Kemudian instan kelas Program akan
37
membuat instan kelas Game dengan parameter yang ada pada instan kelas GameSettings.
Tabel 3.2 Use case inisialisasi game. Use Case Name : Inisialisasi game setting Requirements Explored : Player (Actor) Context (Role) : Administrator Preconditions : Aplikasi server telah dijalankan Triggers : Administrator menuliskan perintah start diikuti dengan nama file map Main Course of Action : - Administrator melakukan inisialisasi game setting pada saat server akan diaktifkan dengan cara menuliskan nama file map setelah perintah start. File map tersebut menggunakan format dokumen XML yang menyimpan parameter-parameter game setting yaitu description, mapPath, tilesetPath, techPath, dan factionTypeName. - Sistem akan melakukan pembacaan game setting sebelum server diaktifkan. Alternate Courses of Action : Exceptional Courses of Action : - Program akan dihentikan jika file map yang dimasukan tidak ditemukan
: Program
: Administrator
: GameSettings
init( ) map file name loadScenarioInfo(string, ScenarioInfo) create loadGameSettings(ScenarioInfo, GameSettings) create setState(ProgramState)
Gambar 3.7 Sequence inisialisasi game. 38
: Game
B. Use Case Lobby
<<extend>> Input IP Server <
> Pengguna
Loading Data
Receive Game Settings
<<extend>> Join Game
Connection Authorization
Gambar 3.8 Use case lobby.
Lobby berfungsi sebagai jembatan yang menghubungkan pertama kali antara pengguna dengan game server. Berhasil tidaknya pengguna bergabung ke dalam game tergantung berhasil tidaknya proses lobby antara kedua belah pihak. Fungsi lobby mempunyai 3 (tiga) proses utama yaitu proses joint game, connection authorization, dan loading data. Pertama kali pengguna melakukan proses joint game untuk meminta koneksi ke game server, kemudian server memberikan otorisasi koneksi. Ketika proses koneksi dengan server berhasil, maka server mengirimkan game settings, selanjutnya game client melakukan loading data sesuai dengan parameter-parameter yang ada pada game settings. Pada saat loading data selesai maka pengguna sudah dapat bergabung ke dalam game. Tabel 3.3 Use case input IP server. Use Case Name : Input IP server Requirements Explored : Player (Actor) Context (Role) : Pengguna Preconditions : Pengguna telah memilih menu joint pada game client Triggers : Main Course of Action : Pengguna menuliskan alamat IP server sebagai tujuan pengiriman data. Alternate Courses of Action : - Pengguna dapat memilih tombol back untuk kembali ke menu utama. - Pengguna dapat memilih tombol connected untuk menghubungkan dengan server. Exceptional Courses of Action : 39
Tabel 3.4 Use case joint game. Use Case Name : Joint game Requirements Explored : Player (Actor) Context (Role) : Pengguna Preconditions : Pengguna telah memilih menu joint pada game client Triggers : Proses joint game akan diikuti oleh proses connection authorization untuk memverifikasi pengguna dan loading data pada saat otorisasi diterima oleh server. Main Course of Action : Pengguna memilih tombol connect untuk melakukan hubungan dengan server. Alternate Courses of Action : Pengguna dapat memilih tombol back untuk kembali ke menu utama. Exceptional Courses of Action : Jika dalam 10 detik tidak ada respon dari server, maka koneksi ke server gagal.
Tabel 3.5 Use case connection authorization. Use Case Name : Connection authorization Requirements Explored : Player (Actor) Context (Role) : Pengguna Preconditions : Pengguna telah menekan tombol connect pada game client Triggers : Main Course of Action : - Pengguna mengirim message identitas pengguna ke server. - Jika ada respon, maka pengguna akan menunggu paket game settings dari server. Alternate Courses of Action : Exceptional Courses of Action : Jika dalam 10 detik tidak ada respon dari server, maka koneksi ke server gagal.
Tabel 3.6 Use case loading data. Use Case Name : Loading data Requirements Explored : Player (Actor) Context (Role) : Pengguna Preconditions : Paket game settings telah diterima oleh pengguna Triggers : Main Course of Action : Membaca data-data yang dibutuhkan game sesuai dengan game settings yang diterima pengguna kemudian menyimpannya dalam struktur data. Alternate Courses of Action : Exceptional Courses of Action : Loading data gagal jika data-data yang dibutuhkan game tidak ditemukan atau tidak sesuai dengan game settings
40
: Pengguna
: MenuStateJoinGame
: ClientInterface
: ServerInterface
: Game
IP server mouseClick( ) init( ) connect(Ip, int)
waitForConnection( ) authorization isConnect( ) connect=true sendMessage(nmtIntro) game settings sendMessage(nmtLaunch) create game settings load( ) connect=false
Gambar 3.9 Sequence lobby.
Tabel 3.7 Use case receive game settings. Use Case Name : Receive game settings Requirements Explored : Player (Actor) Context (Role) : Pengguna Preconditions : Jika otorisasi diterima oleh server Triggers : Main Course of Action : Pengguna menerima game settings yang dikirim server, kemudian data-data yang ada pada game settings dijadikan sebagai parameter untuk proses loading data. Alternate Courses of Action : Exceptional Courses of Action : Jika penerimaan game settings gagal, maka proses loading data tidak dilakukan.
41
C. Use Case Simulasi
<<extend>> AI Rule
Update AI
<> Update Unit
Game (from game)
Update World
<>
<>
Update Resource
Update Network
Update System Ticked
Give Network Command
Gambar 3.10 Use case simulasi game.
Simulasi berfungsi sebagai game lojik yaitu proses berulang yang memperbaharui status game secara terus-menerus selama berlangsungnya game. Proses simulasi pada server meliputi :
update AI, untuk memperbaharui AI sesuai dengan AI rule pada saat itu,
update world, untuk memperbaharui unit dan resource,
update network, untuk memperbaharui network message yang digunakan sebagai parameter untuk update simulasi game, dan
update system ticked, yaitu fungsi untuk melakukan sinkronisasi game server dan game client yang terdiri dari dari 3 (tiga) proses system ticked yaitu tick AI, tick world, dan tick network seperti terlihat pada Gambar 3.11.
<> SystemTicked
Tick AI
<> Tick Game System
<>
Tick World
Tick Network
Gambar 3.11. Use case system ticked. 42
Tabel 3.8 Use case update AI. Use Case Name : Update AI Requirements Explored : Player (Actor) Context (Role) : Sistem Preconditions : Simulasi game sedang berlangsung dan sistem menerima perintah unit dari client. Triggers : Sistem akan melakukan update data pada unit Main Course of Action : - Sistem akan melakukan pembaharuan perintah pada unit sesuai dengan perintah yang diterima dari client. - AI rule akan di set pada unit sesuai dengan perintah yang diberikan yaitu move, stop, attack, patrol, unit construct building, dan harvest. Alternate Courses of Action : Exceptional Courses of Action :
Tabel 3.9 Use case update world. Use Case Name : Update world Requirements Explored : Player (Actor) Context (Role) : Sistem Preconditions : Simulasi game sedang berlangsung dan terjadi perubahan game state. Triggers : Sistem akan melakukan pembaharuan pada unit dan resources Main Course of Action : Sistem akan melakukan komputasi pada unit dan resources sesuai dengan AI rule masing-masing unit. Alternate Courses of Action : Exceptional Courses of Action :
Tabel 3.10 Use case update network. Use Case Name : Update network Requirements Explored : Player (Actor) Context (Role) : Sistem Preconditions : Simulasi game sedang berlangsung dan sistem menerima perintah unit dari client. Triggers : Sistem akan melakukan update AI dan update world Main Course of Action : - Sistem menerima message command dari client. - Sistem melakukan filter message command. - Sistem menampung message command ke dalam nework command list. - Sistem memproses message command dan memberikannya ke unit-unit yang bersangkutan. - Sistem melakukan pengiriman kembali semua message command yang ada pada network command list ke semua client dengan cara multicast. - Sistem menghapus semua message command yang telah dikirimkan ke client. Alternate Courses of Action : Exceptional Courses of Action : Jika message yang diterima bukan termasuk paket dalam network message atau message berisi -1 atau null, maka message tersebut akan diabaikan oleh sistem.
43
Tabel 3.11 Use case update system ticked. Use Case Name : Update sistem ticked Requirements Explored : Player (Actor) Context (Role) : Sistem Preconditions : Simulasi game sedang berlangsung. Triggers : Sistem akan melakukan sinkronisasi pada proses update AI, update world, dan update network Main Course of Action : - Simulasi game di set sebanyak 40 fps (frame per second). - Jumlah update tick untuk pengulangan simulasi dilakukan dengan cara mengambil frekuensi clock komputer dibagi dengan 40. Set clock terakhir dengan clock sekarang. Set jumlah simulasi dengan 0. - Sistem melakukan simulasi apabila clock sekarang dikurangi clock terakhir sama dengan jumlah update tick, kemudian nilai jumlah simulasi ditambah dengan 1. - Simulasi terus berulang sampai jumlah simulasi bernilai 40, kemudian jumlah simulasi di set dengan 0 untuk proses simulasi pada detik berikutnya. - Update tick AI dan world sama seperti di atas. - Khusus untuk update tick network tergantung dari administrator berapa kali update network untuk setiap detiknya, jika administrator menginginkan 4 kali update network setiap detiknya atau setiap 250 ms (milli second), maka periode update network dilakukan setiap 10 frame. Alternate Courses of Action : Exceptional Courses of Action :
: Program
: Game
AI
World
Network
Ticked System
load( ) init( ) timer system loop( ) tick( ) update( ) update( ) update( ) update( ) isRun( )=false end( )
Gambar 3.12 Sequence simulasi game. 44
D. Use Case Komunikasi Komunikasi berfungsi sebagai media penghubung interaksi game client dengan game server. Ada dua proses utama pada fungsi komunikasi yaitu message process yang terdiri dari proses send message dan receive message dan proses build network command yaitu membuat kumpulan network command yang diterima untuk diproses oleh unit-unit yang bersangkutan dan diperbaharui pada saat proses simulasi, kemudian kumpulan network command tersebut dikirim kembali secara multicast ke semua game client.
Pengguna
Select object
<<extend>>
<<extend>> Give unit an order Stop movement <<extend>> <> <<extend>>
<<extend>>
Patrol location
<<extend>> Attack unit <> Unit contruct building <>
<>
Gather resources
<>
<> <>
<> <>
<>
<> Move to location
Manipulate resources
Send command
Gambar 3.13 Use case komunikasi.
Fungsi send command pada game client seperti tampak pada Gambar 3.13 dilakukan oleh pengguna dengan terlebih dahulu memilih obyek kemudian memberikan perintah kepada unit berupa menghentikan pergerakan unit, membuat bangunan, mengumpulkan resource, perpindahan ke lokasi unit, menyerang, atau patroli, kemudian perintah tersebut dikirim ke server. Game server akan menerima pesan yang dikirim client, membentuk network command, melakukan update ke unit-unit 45
yang bersangkutan, dan mengirimkan network command secara multicast ke semua game client seperti tampak pada Gambar 3.14 dan Gambar 3.15.
Receive commands ServerInterface
<>
(from network_interface)
Build network command
Give network command
Send network command
Gambar 3.14 Use case build network command.
: Pengguna
: Commander
: ClientInterface
: ServerInterface
command order tryGiveCommand( )
pushNetworkCommand( ) getCommand( ) sendCommands( ) addCommand() buildCommand( ) giveNetworkCommand( ) *getCommand(int) update( ) sendCommand() giveNetworkCommand( ) getCommand( ) update( )
Gambar 3.15 Sequence komunikasi client-server. 46
Tabel 3.12 Use case receive commands. Use Case Name : Receive commands Requirements Explored : Player (Actor) Context (Role) : Server interface Preconditions : Pengguna telah mengirimkan message command. Triggers : Main Course of Action : - Server interface akan selalu mendengarkan pesan yang datang. - Jika ada pesan dari client, maka server akan melakukan filter message, jika pesan valid maka pesan tersebut akan dimasukan ke network command list. Alternate Courses of Action : Exceptional Courses of Action : Jika message yang diterima bukan termasuk paket dalam network message atau message berisi -1 atau null, maka message tersebut akan diabaikan oleh sistem.
Tabel 3.13 Use case build network command. Use Case Name : Build network command Requirements Explored : Player (Actor) Context (Role) : Server interface Preconditions : Setelah server menerima message commands Triggers : Sistem akan memberikan semua perintah ke unit-unit yang bersangkutan Main Course of Action : - Sistem mengambil message command yang ada di network command list, kemudian message tersebut di buat perintah unit (unit command). - Setiap message command yang telah diubah menjadi unit command langsung diberikan ke unit yang bersangkutan. Alternate Courses of Action : Exceptional Courses of Action :
Tabel 3.14 Use case send network command. Use Case Name : Send network command Requirements Explored : Player (Actor) Context (Role) : Server interface Preconditions : Setelah server memberikan semua message command ke semua client. Triggers : Main Course of Action : Sistem mengirim semua message command yang ada di network command list ke semua client dengan cara multicast. Alternate Courses of Action : Exceptional Courses of Action :
47
3.6
Spesifikasi Perancangan
3.6.1
Perancangan Protokol Komunikasi
A. UDP Transfer data yang diterapkan pada aplikasi server MMOG ini menggunakan protokol UDP dengan alasan sebagai berikut.
Aplikasi server MMOG ini membutuhkan kinerja tinggi.
Server yang akan dibuat, dirancang untuk melayani client dengan jumlah minimal 1000 client.
Paket yang dipertukarkan pada aplikasi MMOG ini berukuran kecil.
Pada aplikasi MMOG ini urutan dan kehilangan paket tidak terlalu berpengaruh pada proses simulasi game, karena server MMOG ini dirancang untuk selalu mengirimkan game state setiap 250 ms (setiap ¼ detik).
B. Komunikasi Data Lalu-lintas komunikasi yang dirancang pada aplikasi MMOG ini menggunakan unicast (peer-to-peer) dan multicast (one-to-many). Semua pengiriman paket data dari client ke server menggunakan komunikasi unicast, sedangkan pengiriman paket secara unicast dari server ke client hanya terjadi pada saat proses lobby. Komunikasi multicast hanya digunakan oleh server yaitu pada saat pengiriman paket game state ke semua client. Pada Gambar 3.16 setiap client mengirim data ke server secara unicast, jika asumsi terdapat 1000 client maka jumlah paket yang diterima server adalah sebanyak 1000 paket. Sedangkan server hanya mengirim paket satu kali secara multicast, sehingga jika terdapat 1000 client yang telah teregistrasi ke alamat IP multicast group, masingmasing client tersebut akan menerima paket yang sama. Pengiriman paket data secara multicast tersebut akan menghemat pemakaian bandwidth.
48
Server
Komunikasi unicast Komunikasi multicast
Client Client
Multicast Group
Client
Gambar 3.16 Komunikasi data unicast dan multicast.
C. Tipe Pesan Jaringan Semua komunikasi data yang dirancang antara game server dan game client diidentifikasi dengan tipe pesan jaringan (network message type) sebagai berikut. 1. nmtInvalid, yaitu tipe pesan kosong atau pesan yang tidak termasuk dalam daftar pesan pada aplikasi ini, pesan tersebut akan diabaikan oleh sistem. 2. nmtConnect, yaitu tipe pesan yang digunakan untuk ping sebelum membuat koneksi dengan server pada saat proses lobby. 3. nmtIntro, yaitu tipe pesan yang dikirim client pada saat koneksi dengan server berhasil. 4. nmtLaunch, yaitu tipe pesan yang dikirim server setelah menerima pesan nmtIntro, dalam tipe pesan ini akan dikirim juga game settings ke client. 5. nmtReady, yaitu tipe pesan yang dikirim client setelah menerima pesan nmtLaunch, sebagai tanda client siap menerima semua game state yang ada di server. 6. nmtFactionList, yaitu tipe pesan yang dikirim server berikut semua game state client yang ada di server. 7. nmtReqNewFaction, yaitu tipe pesan yang dikirim client untuk meminta faksi baru (game state untuk pemain baru). 49
8. nmtNewFaction, yaitu tipe pesan yang berisi faksi baru yang dikirim ke client setelah mengirim pesan nmtReqNewFaction. 9. nmtCommandList, yaitu kumpulan pesan perintah unit yang diterima dan dikirim oleh server/client. 10. nmtQuitFaction, yaitu tipe pesan yang dikirim client ketika memutuskan hubungan dengan server (keluar dari game). 11. nmtQuit, yaitu tipe pesan yang dikirim server ke semua client pada saat server keluar dari game. Tipe pesan jaringan tersebut merupakan bagian dari data pesan jaringan bertipe integer dengan panjang data 1 byte dan diletakan pada byte pertama data pesan jaringan. Tipe perintah jaringan pada unit diidentifikasi dengan network command type bertipe integer yang panjangnya 2 byte. Berikut ini adalah network command type. 1. nctGiveCommand, yaitu tipe perintah untuk diberikan langsung kepada unit. 2. nctCancelCommamd, yaitu tipe perintah untuk membatalkan semua perintah pada unit. 3. nctSetMeetingPoint, yaitu tipe perintah untuk menentukan posisi area bertemu pada unit. Tipe perintah pada unit (command type id) diidentifikasi dengan nomor berikut. 1. stop, perintah untuk menghentikan pergerakan. 2. move, perintah untuk memindahkan unit ke posisi tertentu. 3. attack, perintah untuk menyerang musuh. 4. attack stopped, perintah untuk menghentikan serangan. 5. build, perintah untuk membuat bangunan. 6. harvest, perintah untuk mengumpulkan resource. 7. repair, perintah untuk memperbaiki bangunan yang rusak. 8. produce, perintah untuk memproduksi unit.
50
3.6.2
Perancangan Proses
A. Lobby Proses lobby dimulai dengan client melakukan ping ke server, jika dalam rentang waktu tertentu (pada aplikasi ini rencana timeout adalah 10 detik) tidak ada respon dari server maka proses lobby gagal. Jika ada jawaban dari server berupa pesan nmtConnect, maka server sedang running dan client akan mengirimkan pesan nmtIntro. Jika server menerima pesan nmtIntro, maka server akan mengirimkan game settings ke client, selanjutnya ketika server menerima pesan nmtReady, maka server akan mengirimkan semua game state ke client. Berikut ini adalah gambar proses komunikasi lobby.
Client
Server nmtC
onnec
t
Time out nmtC
onnec
nmtIn
t
tro
u n ch nmtLa ttings se e m a G nmtR
eady
ist ctionL nmtFa e state m All ga nmtR
eqNe
wFac
tion
ction ewFa nmtN me state a g New
Gambar 3.17 Proses lobby.
B. Pemutusan Koneksi Setiap kali client ingin memutuskan koneksi dengan server, maka client tersebut akan mengirimkan pesan nmtQuitFaction ke server yang berisi nomor indeks client, server akan menghapus game state client dengan nomor indeks tersebut, selanjutnya 51
mengirimkan kembali pesan nmtQuitFaction tersebut ke seluruh client. Jika client menerima pesan nmtQuitFaction dengan nomor indeks yang sama dengan nomor indeks client, maka client langsung keluar dari game, sebaliknya jika nomor indeks pada pesan nmtQuitFaction tidak sama dengan nomor indeks client, maka client hanya akan menghapus game state client dengan nomor indeks tersebut. Jika pemutusan koneksi dilakukan oleh server, maka server akan mengirim pesan nmtQuit ke seluruh client, sehingga semua client akan keluar dari game.
C. Perintah Unit Jaringan (Network Unit Command) Pengguna dapat memberikan perintah terhadap satu atau beberapa unit (maksimal 16 unit) sekaligus. Setiap perintah terdiri dari nomor indeks unit, tipe perintah, posisi unit, tipe unit, dan target unit. Tipe perintah yang ada dalam game ini terdiri dari :
stop, perintah untuk menghentikan pergerakan,
move, perintah untuk memindahkan unit ke posisi tertentu,
attack, perintah untuk menyerang musuh,
attack stopped, perintah untuk menghentikan serangan,
build, perintah untuk membuat bangunan,
harvest, perintah untuk mengumpulkan resource,
repair, perintah untuk memperbaiki bangunan yang rusak, dan
produce, perintah untuk memproduksi unit.
Jika pengguna memberikan perintah untuk beberapa unit sekaligus, maka setiap perintah tersebut akan dimasukan ke dalam buffer network command list, selanjutnya client mengirim pesan nmtCommandList yang berisi perintah-perintah unit
ke
server. Perintah-perintah yang diterima server akan diberikan ke masing-masing unit yang bersangkutan. Selanjutnya pesan nmtCommandList tersebut di kirim ke semua client secara multicast dalam periode tertentu (pada aplikasi ini perintah unit dikirim setiap 250 ms). Perintah-perintah yang berhasil dikirim oleh server selanjutnya dihapus dari buffer network command list. Berikut ini adalah gambar proses penerimaan perintah unit jaringan pada server.
52
Server mendengarkan perintah unit yang datang
Menerima perintah unit
memasukan perintah unit ke buffer
Menghapus semua perintah yang ada di buffer
Mengirim kembali semua perintah yang ada di buffer ke semua client
memberikan setiap perintah ke unit yang bersangkutan
Gambar 3.18 Proses perintah unit jaringan.
D. Sinkronisasi Sinkronisasi bertujuan untuk memelihara konsistensi sistem antara server dengan client sebagai akibat adanya perbedaan kualitas komunikasi data pada setiap client sehingga latency yang dihasilkan juga berbeda-beda untuk setiap client. Teknik sinkronisasi yang akan diterapkan pada aplikasi server ini adalah bucket synchronize. Bucket synchronize adalah teknik sinkronisasi yang intinya adalah menyetarakan latency antara server dengan client dengan cara membagi masing-masing frekuensi clock sistem dengan jumlah fps (frame per second) simulasi. MMORTS dengan jumlah pengguna banyak (ratusan hingga ribuan pengguna), menggunakan latency berkisar antara 250 – 500 ms (milli second). Latency < 250 ms memungkinkan terjadi overhead yang menyebabkan banyaknya antrian dalam network. Latency > 500 ms akan menyebabkan delay yang lama yang memungkinkan terjadinya loss data. Pada aplikasi server MMOG ini simulasi yang dirancang berulang setiap 40 fps atau dalam setiap detik terjadi 40 kali simulasi. Update komunikasi network yang diterapkan pada game ini adalah setiap 250 ms atau setiap detik terjadi 4 kali update network sehingga periode update network dilakukan setiap 10 frame. Karena clock komputer client berbeda-beda, maka dilakukan sinkronisasi sebagai berikut. 53
1. Cari nilai update tick untuk iterasi simulasi dengan cara membagi nilai frekuensi clock sistem dengan jumlah fps simulasi yaitu 40, set nilai last tick (clock terakhir) dengan this tick (clock saat ini), dan inisialisasi nilai frame dengan 0. 2. Untuk setiap detik lakukan looping simulasi dengan pengecekan clock dengan latency (update tick) yang dihasilkan, jika this tick – last tick >= update tick, maka :
tambahkan nilai frame dengan 1,
tambahkan nilai last tick dengan update tick, dan
jika nilai frame adalah kelipatan 10, maka lakukan update network.
3. Setiap nilai frame berjumlah 40, maka set nilai frame dengan 0 untuk simulasi detik berikutnya. Dengan teknik sinkronisasi di atas, maka akan mendapatkan keselarasan latency antara server dengan client sehingga komunikasi yang terjadi akan terasa real time.
E. Dead Reckoning Dead reckoning bertujuan untuk menyelaraskan pergerakan unit antara server dengan client sebagai akibat adanya perbedaan latency network yang dihasilkan masing-masing client dan adanya kehilangan informasi dalam periode frame tertentu di client, karena tidak setiap informasi frame dikirim oleh server. Hal tersebut dapat menyebabkan perbedaan waktu pergerakan antara server dengan client. Dead reckoning digunakan untuk memprediksikan pergerakan unit ke posisi berikutnya tanpa dipengaruhi oleh kualitas network sehingga diharapkan pergerakan unit akan berjalan mulus dan menyamai pergerakan unit di server. Pada aplikasi ini server hanya mengirim informasi posisi unit setiap 250 ms, sehingga akan ada informasi yang hilang setiap 250 ms yang menyebabkan pergerakan unit di client tidak smooth (patah-patah). Untuk mengatasi hal ini di client menerapkan teknik dead reckoning dengan parameter yang diterima client berupa posisi awal unit dan posisi tujuan unit, selanjutnya prediksi berikutnya dilakukan oleh AI dengan menggunakan algortima path finding yaitu A* (A star). Penerapan dead reckoning pada aplikasi server MMOG ini adalah sebagai berikut. 54
Ketika pengguna memberikan perintah tertentu pada unit, sistem akan mengirimkan perintah tersebut ke server.
Jika dalam waktu tertentu (pada game ini menggunakan 2000 ms) tidak ada respon dari server karena ada masalah komunikasi jaringan, maka game client akan menjalankan perintah tersebut dengan bantuan fungsi dead reckoning pada unit tersebut, sehingga proses simulasi di client berjalan dengan normal. Hal ini akan menyebabkan perbedaan posisi unit di server dengan di client.
Ketika komunikasi terjalin kembali antara server dengan client, maka server akan menyesuaikan posisi unit dengan posisi unit di client.
Dengan teknik seperti di atas pergerakan unit di client akan smooth walaupun sangat dimungkinkan terjadinya ketidakkonsistenan antara server dengan client, tetapi hal tersebut tidak terlalu berpengaruh karena update posisi setiap 250 ms atau setiap ¼ detik.
3.6.3
Perancangan Tipe Data
Tipe data yang dirancang secara lengkap dapat dilihat pada tabel-tabel tipe data berikut ini.
Tabel 3.15 Tipe data NetworkCommand.
1
networkCommandType
int16
Panjang (byte) 2
2
unitId
int16
2
Nomor identitas unit
3
commandTypeId
int16
2
Nomor identitas perintah
4
positionX
int16
2
Posisi horizontal unit
5
positionY
int16
2
Posisi ke dalaman unit
6
unitTypeId
int16
2
Nomor identitas tipe unit
7
targetId
int16
2
Nomor identitas target unit
No
Datagram
Tipe Data
Total panjang data
14
55
Keterangan Jenis perintah jaringan
Tabel 3.16 Tipe data NetworkResource.
1
amount
int16
Panjang (byte) 2
2
posX
int16
2
Posisi X resource
3
posY
int16
2
Posisi Y resource
4
balance
int16
2
Jumlah ketersedian resource
No
Datagram
Tipe Data
Total panjang data
Keterangan Jumlah resource yang dikumpulkan
8
Tabel 3.17 Tipe data NetworkUnit.
1
unitId
Tipe Data int16
2
unitTypeId
int16
2
Nomor identitas tipe unit
3
posX
int16
2
Posisi X unit
4
posY
int16
2
Posisi Y unit
5
Hp
int16
2
Jumlah hit point
6
commandTypeId
int16
2
Nomor identitas tipe perintah
7
commandPosX
int16
2
Perintah ke posisi X
8
commandPosY
int16
2
Perintah ke posisi Y
9
commandUnitTypeId
int16
2
Nomor identitas tipe unit
10
commandTargetId
int16
2
Perintah ke target unit
No
Datagram
Panjang (byte) 2
Total panjang data
Keterangan Nomor identitas unit
20
Tabel 3.18 Tipe data NetworkFaction.
1
index
int8
Panjang (byte) 1
2
teamIndex
int8
1
3
startLocationIndex
int8
1
4
resourceCount
int8
1
5
unitCount
int16
2
6
resources
NetworkResource[5]
40
7
storeResources
NetworkResource[5]
40
8
units
NetworkUnit[80]
1600
No
Datagram
Tipe Data
Total panjang data
1686
56
Keterangan Nomor index pemain Nomor indek team Nomor index lokasi pemain Jumlah resource pemain Jumlah unit pemain Detil resource yang tersedia Detil resource yang dikumpulkan Detil unit pemain
Tabel 3.19 Tipe data pesan jaringan No 1
nmtInvalid
2
nmtIntro
3
nmtConnect
4
5 6
Tipe Data
Total (byte)
-
-
1
ip
char[15]
name
char[64]
Tipe Pesan Jaringan
nmtLaunch
nmtReady nmtFactionList
Datagram
-
-
description
char[256]
mapPath
char[256]
tilesetPath
char[256]
techPath
char[256]
factionTypeName
char[256]
-
-
factionCount
int8
restFactionCount
int16
factions 7
8
nmtReqNewFaction
nmtNewFaction
int8
teamIndex
int8
locationIndex
int8
startUnitId
int16
commandCount
int8
10
nmtQuitFaction
factionIndex
11
nmtQuit
-
3.6.4
-
factionIndex
nmtCommandList
1
1281
1 6748
NetworkFaction[4]
-
9
80
commands
NetworkCommand[64]
1
6
898
int16
3
-
1
Perancangan Class Diagram
Class diagram yang dibuat pada sub bab ini dibatasi hanya untuk game server, sedangkan untuk game client dapat dilihat pada dokumen game Sultan Agung, penerbit LSKK STEI-ITB tahun 2008[11].
57
A. Program Utama
Gambar 3.19 Class diagram program utama.
B. Simulasi Game
Gambar 3.20 Class diagram simulasi game. 58
C. Network Manager
Gambar 3.21 Class diagram network manager.
D. Network Interface
Gambar 3.22 Class diagram network interface. 59
E. Network Message
Gambar 3.23 Class diagram network message.
60
F. Socket
Gambar 3.24 Class diagram socket.
3.6.5
Perancangan Antarmuka Pengguna
Perancangan antarmuka pengguna untuk aplikasi server MMOG ini adalah menggunakan perintah tertulis (command language) dengan alasan untuk meningkatkan kinerja sistem. Interaksi antara pengguna dengan sistem dilakukan dengan cara menuliskan baris perintah pada console. Di bawah ini adalah rancangan menu untuk antarmuka pengguna : 1. maps, menu untuk melihat daftar map, 2. info, menu untuk melihat statistik semua pemain, 3. lang, menu untuk melihat dan mengaktifkan bahasa, 4. setIP, menu untuk memilih network interface yang akan digunakan, 5. start, menu untuk mengaktifkan server, 6. stop, menu untuk menghentikan server, 7. add, menu untuk menambahkan dummy pemain pada server, 8. units, menu untuk menampilkan informasi semua unit, 9. help, menu untuk menampilkan menu-menu yang ada di server, 10. quit, menu untuk keluar dari aplikasi server.
61