Dilansir dari PC Gamer, Rockstar akan mengimplementasikan perbaikan yang dibuat oleh seorang penggemar, setelah penggemar tersebut menemukan bug dalam game GTA Online dan mencoba untuk memperbaikinya, dan Rockstar akan mengimplementasikan hal tersebut pada update terbaru mereka.
Seorang pengguna GitHub tostercx atau dikenal dengan t0st mempublikasikan sebuah postingan blog mengenai bug yang terdapat dalam GTA Online, dimana ia menjelaskan secara detail bagaimana caranya untuk mempersingkat waktu loading dari enam menit, menjadi kurang dari dua menit.
Ketika postingan itu pertama kali dipublikasikan, Rockstar menyatakan bahwa perbaikan tersebut belum teruji, dan belum bisa digunakan untuk umum. Setelah melakukan serangkaian pemeriksaan, Rockstar memberitahu kepada PC Gamer bahwa temuan tersebut akurat dan akan diimplementasikan pada update selanjutnya.
Baca juga: Wajah Baru dari Game Klasik Shin Megami Tensei 3: Nocturne
Setelah penyelidikan menyeluruh, kami dapat mengonfirmasi bahwa pemain t0st memang mengungkapkan aspek kode game yang terkait dengan waktu muat untuk GTA Online versi PC yang dapat ditingkatkan. Hasil investigasi ini, kami telah membuat beberapa perubahan yang akan diterapkan dalam pembaruan yang akan datang.
Sebenarnya apa yang ditemukan oleh t0st? Dalam tulisannya yang dimuat di nee.lv, t0st mengeluhkan lambatnya loading pada GTA Online yang sudah ada dari 7 tahun yang lalu. Kemudian ia menjabarkan bug-bug yang ada pada game tersebut dan berikut rincian dari penemuan tersebut
- Benchmark
Story mode load time: ~1m 10s
Online mode load time: ~6m flat
Startup menu disabled, time from R* logo until in-game (social club login time isn’t counted).
Old but decent CPU: AMD FX-8350
Cheap-o SSD: KINGSTON SA400S37120G
We have to have RAM: 2x Kingston 8192 MB (DDR3-1337) 99U5471
Good-ish GPU: NVIDIA GeForce GTX 1070
Data di atas merupakan spesifikasi PC milik t0st, dalam tulisan yang dimuat di situs nee tersebut, ia mengeluhkan lamanya memuat ulang mode daring di GTA Online yang memakan waktu enam kali lebih lama. t0st juga membagikan survey mengenai waktu loading pada GTA Online di sebuah forum dan hasilnya, dari 271 responden 81 persen pengguna merasakan waktu loading game tersebut selama 3-6 menit
- Pengukuran yang akurat
Pada bagian ini, t0st mengeluhkan tidak adanya data penggunaan disk usage, data Ethernet yang langsung anjlok begitu masuk mode daring, dan penggunaan memori yang cenderung flat pada mode tersebut, sedangkan CPU dipaksa bekerja sangat keras ketika berada pada mode daring.
- Profiling
Pada bagian ini, t0st melakukan profiling sederhana dari GTA menggunakan aplikasi prototype bernama Luke Stackwalker.
- Permasalahan bagian pertama
Pada bagian ini t0st menjabarkan lebih rinci dari bagian sebelumnya, dimana ia menemukan ada kejanggalan berupa kode strlen, dan setelah diuraikan ternyata ada kode JSON sebesar 10 megabytes atau setara dengan 63 ribu data entry
…,
{
“key”: “WP_WCT_TINT_21_t2_v9_n2”,
“price”: 45000,
“statName”: “CHAR_KIT_FM_PURCHASE20”,
“storageType”: “BITFIELD”,
“bitShift”: 7,
“bitSize”: 1,
“category”: [“CATEGORY_WEAPON_MOD”]
},
…
Data ini merupakan “net shop catalog” yang mana menurut t0st merupakan bagian dari items maupun upgrade yang bisa dibeli di GTA Online
t0st mengakui bahwa kode sscanf merupakan bagian dari strlen, ia juga tidak menyalahkan pihak pengembang dan berasumsi bahwa kode tersebut hanya memindai byte per byte hingga menjadi NULL.
- Permasalahan bagian kedua
struct {
uint64_t *hash;
item_t *item;
} entry;
Pada bagian ini, t0st mempermasalahkan kode yang terlihat di atas setelah melakukan penguraian, dan dengan menggunakan hashmap, t0st memperinci masalah yang ada pada kode (gambar dibawah) dan mengeluhkan bagaimana Rockstar (pengembang) tidak memeriksa list tersebut.
- PoC
Pada bagian ini, t0st mulai melakukan perbaikan, ia menjelaskan bagaimana caranya untuk membenarkan bug yang ada pada GTA Online.
The plan? Write a .dll, inject it in GTA, hook some functions, ???, profit.
The JSON problem is hairy, I can’t realistically replace their parser. Replacing sscanf with one that doesn’t depend on strlen would be more realistic. But there’s an even easier way.
hook strlen
wait for a long string
“cache” the start and length of it
if it’s called again within the string’s range, return cached value
Berikut adalah tampilan kode dari perbaikan yang dilakukan oleh t0st
size_t strlen_cacher(char* str)
{
static char* start;
static char* end;
size_t len;
const size_t cap = 20000;
// if we have a “cached” string and current pointer is within it
if (start && str >= start && str <= end) {
// calculate the new strlen
len = end – str;
// if we’re near the end, unload self
// we don’t want to mess something else up
if (len < cap / 2)
MH_DisableHook((LPVOID)strlen_addr);
// super-fast return!
return len;
}
// count the actual length
// we need at least one measurement of the large JSON
// or normal strlen for other strings
len = builtin_strlen(str);
// if it was the really long string
// save it’s start and end addresses
if (len > cap) {
start = str;
end = str + len;
}
// slow, boring return
return len;
}
Hasilnya? Setelah melakukan percobaan tersebut, memang benar waktu muat ulang pada mode daring dari GTA menjadi lebih singkat sebesar 69.4%, dan pihak Rockstar pun telah memberikan konfirmasi mengenai hal tersebut dan memberikan imbalan kepada t0st sebesar 10 Ribu USD atau sebesar 144 juta Rupiah.
[…] Baca juga: Seorang Fan GTA Berhasil Memperbaiki Bug di GTA Online […]
[…] Baca juga: Seorang Fan GTA Berhasil Memperbaiki Bug di GTA Online […]