Bug-GTA-Online
Cr. Rockstar

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

  1. 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

credit: nee.lv
  1. Pengukuran yang akurat
credit: nee.lv

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. 

  1. Profiling 
credit: nee.lv

Pada bagian ini, t0st melakukan profiling sederhana dari GTA menggunakan aplikasi prototype bernama Luke Stackwalker. 

  1. Permasalahan bagian pertama
credit: nee.lv

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 

credit: nee.lv

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.

  1. 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. 

credit: nee.lv
  1. 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. 

2 thoughts on “Seorang Fan GTA Berhasil Memperbaiki Bug di GTA Online”

Leave a Reply

Your email address will not be published. Required fields are marked *