Satu eksperimen yang menarik telah mendedahkan betapa kukuhnya enjin permainan asal Doom 1993 sebenarnya. Rasa ingin tahu seorang pembangun tentang sistem main balik demo permainan tersebut telah membawa kepada ujian luar biasa selama dua setengah tahun yang menemui batasan asas yang dikongsi oleh banyak permainan video klasik.
Eksperimen Yang Memulakan Semuanya
Pengguna minki dari Lenowo memulakan perjalanan luar biasa ini selepas menemui bagaimana enjin Doom mengendalikan urutan demonya. Setiap kali demo permainan berjalan dan ditetapkan semula, enjin menyimpan pembolehubah baharu dalam rentetan yang sentiasa berkembang. Proses ini berterusan tanpa had, secara teorinya membawa kepada keadaan limpahan di mana data melebihi kapasiti penyimpanan pembolehubah yang digunakan untuk mengandunginya.
Daripada meninggalkan ini sebagai teori semata-mata, minki memutuskan untuk mengujinya menggunakan peranti PDA lama. Pilihan perkakasan bukanlah sewenang-wenangnya— Doom terkenal dengan keupayaannya untuk berjalan pada hampir mana-mana peranti yang mempunyai skrin menjadikan ini mungkin. PDA itu dikuasakan melalui UPS yang disambungkan kepada port USB penghala, menyediakan bekalan 5V yang berterusan untuk memastikan operasi tanpa gangguan.
Penantian Panjang dan Kesimpulan Dramatik
Selepas berjalan berterusan selama tepat dua setengah tahun, perkara yang tidak dapat dielakkan berlaku. Hanya beberapa jam selepas melepasi pencapaian ini, popup Fatal Error muncul pada skrin, mengesahkan bahawa pembolehubah memang telah melimpah dan menyebabkan ranap sistem yang diramalkan. Detik ini mengesahkan pengiraan teori bertahun-tahun tentang batasan dalaman permainan.
Corak Di Kalangan Klasik Permainan Retro
Fenomena ini bukan unik kepada Doom . Komuniti permainan telah mendokumentasikan keanehan serupa merentasi banyak tajuk klasik, mendedahkan benang biasa dalam cara permainan lama mengendalikan penjejakan masa dan peristiwa. Crash Bandicoot 3 mempamerkan tingkah laku yang amat pelik apabila pemasa globalnya melimpah selepas kira-kira 2.27 tahun permainan berterusan. Apabila ini berlaku, permainan memasuki keadaan nyata di mana musuh bergerak mundur melalui masa, objek membeku di tempat, dan keseluruhan tahap rosak sepenuhnya.
Final Fantasy IX menyajikan satu lagi kes menarik dengan pedangnya yang didambakan yang biasanya memerlukan mencapai penjara bawah tanah terakhir dalam masa 12 jam permainan. Walau bagaimanapun, pemain yang sabar menemui laluan alternatif—meninggalkan permainan berjalan selama kira-kira dua tahun menyebabkan pembilang jam dalaman melimpah dan ditetapkan semula, menjadikan senjata itu boleh diakses sekali lagi. Penemuan ini memberikan pedang tersebut sebutan lucu sebagai boleh terlepas dalam sebab yang munasabah dalam komuniti permainan.
Contoh Integer Overflow dalam Permainan Klasik
Permainan | Masa Overflow | Kesan |
---|---|---|
Doom (1993) | 2.5 tahun | Ranap Fatal Error |
Crash Bandicoot 3 | ~2.27 tahun | Musuh bergerak ke belakang, tahap rosak |
Final Fantasy IX | ~2 tahun | Jam reset, pedang jarang boleh diperolehi |
Paper Mario | 4.5 tahun | Pemasa membakar kek reset kepada sempurna |
![]() |
---|
Tangkapan skrin daripada Crash Bandicoot 3 menonjolkan gangguan lucu yang disebabkan oleh limpahan pemasa selepas permainan yang berpanjangan |
Realiti Teknikal Di Sebalik Keajaiban
Tingkah laku luar biasa ini berpunca daripada batasan asas penyimpanan integer dalam sistem permainan lama. Kebanyakan permainan retro bergantung pada pembilang 16-bit atau 32-bit yang bertambah dengan setiap detik permainan atas sebab prestasi. Integer bertanda 16-bit hanya boleh menyimpan nilai sehingga 32,767, manakala rakan tidak bertandanya maksimum pada 65,535. Apabila enjin permainan yang berjalan pada 30 atau 35 detik sesaat akhirnya melebihi had ini, hasilnya berkisar daripada gangguan lucu hingga kegagalan sistem sepenuhnya.
Keadaan limpahan berlaku apabila pembilang melebihi nilai maksimumnya, sama ada berguling kembali kepada nilai minimumnya atau mencetuskan ralat bergantung pada bagaimana kod direka untuk mengendalikan situasi sedemikian. Pembangun era itu tidak pernah menjangka pemain akan mengekalkan permainan berjalan selama bertahun-tahun, menjadikan penemuan ini mengejutkan dan mencerahkan.
Had Penyimpanan Integer
- Integer bertanda 16-bit: Nilai maksimum 32,767
- Integer tidak bertanda 16-bit: Nilai maksimum 65,535
- Integer bertanda 32-bit: Nilai maksimum 2,147,483,647
- Kadar tick permainan: Biasanya 30-35 tick sesaat dalam permainan retro
Bukti Kepada Reka Bentuk Permainan Vintaj
Daripada mewakili amalan pengaturcaraan yang lemah, isu limpahan ini menyerlahkan kekangan praktikal dan falsafah reka bentuk pembangunan permainan awal. Para pembangun membuat andaian munasabah tentang corak penggunaan dan mengoptimumkan kod mereka sewajarnya. Hakikat bahawa permainan ini boleh berjalan berterusan selama bertahun-tahun sebelum menghadapi masalah sebenarnya menunjukkan kestabilan dan kecekapan yang luar biasa dalam seni bina asas mereka.
Eksperimen ini berfungsi sebagai pandangan menarik ke dalam asas matematik permainan klasik, mendedahkan bagaimana had aritmetik dan bukannya ralat pengaturcaraan mencipta tingkah laku tidak dijangka ini. Bagi pemain berdedikasi yang sanggup menunggu bertahun-tahun untuk item jarang atau pengalaman unik, keadaan limpahan ini menawarkan laluan bukan konvensional tetapi sah kepada pencapaian permainan.