[閒聊] 玩家發現了一條遊戲公司反覆使用了20年的

作者: s7503228 (情報屋)   2021-07-23 12:45:54
玩家發現了一條遊戲公司反覆使用了20年的「祖傳程式碼」,出現在多個遊戲場景中
原文連結:https://www.techbang.com/posts/88570-game-code-20years
https://images.plurk.com/1NW7VxMbwI0fEKpWha8Zc0.jpg
有句老話說的好:「要是你的程式碼還能用,就別去碰它。」一條沿用了20多年的「祖傳
程式碼」,讓V社(Valve Software)成了這句話最忠實的踐行者。
在Reddit論壇上,一名玩家最近偶然發現了《戰慄時空》系列裡的燈光閃爍頻率有種奇怪
的既視感:
https://images.plurk.com/1rHTt62NSVQt3yhQAWpkrt.gif
注意到了嗎?23年前的初代《戰慄時空》裡的燈光,居然和2020年誕生的《戰慄時空:艾
莉克絲》有著同樣的閃爍頻率。
這名資深玩家立即意識到了事情的有趣之處,如果這不是什麼彩蛋(經過驗證後確實不是
),那只能解釋為製作方的無心之舉,如果是無心之舉,那就意味著V社將一條放了20多年
的程式碼搬到了新遊戲上。
之後,有人發現了更戲劇的內容:這串程式碼不僅歷史悠久,甚至還見證了V社的遊戲歷史
。因為除了能在戰慄時空全系列中找到相同的燈光場景,在V社的另一個知名系列《傳送門
》裡,也有不少類似景象。
這名玩家順藤摸瓜,最後找到了這個場景的源頭——1996年發售的經典FPS遊戲《雷神之鎚
》。
https://images.plurk.com/5nrb5S064Y76xGiTp60ft3.gif
玩家發現了一條遊戲公司反覆使用了20年的「祖傳程式碼」,出現在多個遊戲場景中
從左上角開始,依次是《雷神之鎚》《戰慄時空》《戰慄時空2》和《傳送門》,將四個場
景放到一塊後,雖然發光的設備不同,但可以很明顯地看出它們維持著相同的閃爍頻率。
在仔細研究了戰慄時空已經開源的程式碼後,另一位玩家給出了相對合理的解釋。V社自初
代《戰慄時空》誕生以來,一直使用26個字母來表示燈光的明暗程度,字母「a」代表完全
熄滅,「Z」則表示最大亮度。
而在這些遊戲的源程式碼中,都能找到一條「mmamammmmmammamamaaamammma」的程式碼,
註釋也正好是「燈光閃爍」:
https://images.plurk.com/1q8VzRl2sHiIMWBxcQms4G.jpg
玩家發現了一條遊戲公司反覆使用了20年的「祖傳程式碼」,出現在多個遊戲場景中
所以在這20年的開發歷史中,凡是涉及到需要「燈光閃爍」的場景,V社基本就是從原先的
程式碼資料庫中復製貼上,這才有了「祖傳程式碼」的說法,但真要細究,可能這段程式
碼也不能算在V社的頭上。
最早出現這個場景的是《雷神之鎚》,這是id Software的創始人約翰·卡馬克利用同名引
擎Quake製作的FPS遊戲,而隨後的初代《戰慄時空》也同樣基於該引擎的改良版開發而成

https://images.plurk.com/3JH80LQlNsguAE6Q5958DQ.jpg
▲ 初代《雷神之鎚》
當初編寫引擎的程序員隨手打下了一串負責場景的程式碼,之後便被V社原封不動照搬過去
;並且即使到了《戰慄時空:艾莉克絲》,這個使用了不同引擎的遊戲時,一旦需要「燈
光閃爍」,製作組還是會下意識地複製前作的程式碼。
於是一代傳一代,最終造就了一段「祖傳程式碼」,這也正好印證了編程領域的一句名言
:永遠不要重複造輪子。
仔細想想,這也算是個製作組無意中留下的彩蛋了,發現這個秘密的玩家最後感慨道:「
現在當我看到這個不規則閃爍的燈光,我就好奇還能在多少遊戲中看到這個場景。」
原文連結:https://www.techbang.com/posts/88570-game-code-20years
=======
不知道為啥imgur上傳檔案一直出錯 只好先用噗浪
「要是你的程式碼還能用,就別去碰它。」<-身為一個工程師 我能告訴你這是真的
大多數工程師在寫程式都會有一個習慣 會先建一個library 然後一直從裡面拉function出來用
就像你有一張素材圖 你會在好幾個物件上面用它當材質 然後你可能會在別的物件上面放那個物件
你永遠不知道這個老程式改了之後出錯會有多少東西出問題
千萬不要去碰舊程式 頂多改改最末端的東西 要改寧願自己建新的備著用(ry
作者: WhoChaos (無糖常溫)   2021-07-23 12:47:00
有趣
作者: lordaelon (獨墨狂草)   2021-07-23 12:47:00
簽名檔優質
作者: YuzanJhang (Yuzan)   2021-07-23 12:47:00
太酷了吧
作者: DarkyIsCat (黑肉貓娘讚)   2021-07-23 12:47:00
作者: vsepr55 (vsepr55)   2021-07-23 12:49:00
這就是oop的奧義
作者: wk415937 (wk4)   2021-07-23 12:49:00
滿有趣的
作者: bobby4755 (蒼鬱之夜)   2021-07-23 12:49:00
有趣
作者: gn02218236   2021-07-23 12:49:00
高重用性的最佳實作
作者: a2334436 (<lol>)   2021-07-23 12:49:00
這也沒甚麼必要改吧
作者: none049 (沒有人)   2021-07-23 12:50:00
酷欸.jpg
作者: lazarus1121 (...)   2021-07-23 12:50:00
就跟Lorem ipsum dolor sit amet一樣意思吧業界總會有些經常拿來使用的東西
作者: Ericz7000 (Ericz7000nolan)   2021-07-23 12:51:00
也才小東西而已 沒什麼好改的吧
作者: ppgame (虎紋蜜瓜)   2021-07-23 12:52:00
你這篇文也反覆使用
作者: dannyshan (↓↘→↓↘→○)   2021-07-23 12:52:00
公司內部素材?
作者: ga2006221985 (野生小妹)   2021-07-23 12:52:00
為什麼我看那GIF好像有音樂==
作者: k960608 (霧羽‧浪沙)   2021-07-23 12:52:00
op了 你這也是祖傳反覆使用嗎
作者: s7503228 (情報屋)   2021-07-23 12:53:00
!? 原來有人發了嗎哇靠真的耶
作者: naya7415963 (稻草魚)   2021-07-23 12:53:00
能從燈光閃爍看出既視感也是滿厲害的
作者: tym7482 (Max)   2021-07-23 12:54:00
多一事不如少一事
作者: jim924211 (海未推)   2021-07-23 12:54:00
舊程式還真的是不要動,動了出其他問題更麻煩
作者: iam0718 (999)   2021-07-23 12:56:00
想到魔獸包包
作者: saiga12416 (碎牙)   2021-07-23 12:56:00
蜀漢老麵嘛wwwww
作者: r85270607 (DooMguy)   2021-07-23 12:57:00
作者: RevanHsu (The Aquanaut)   2021-07-23 12:57:00
魔獸16格包就是動了風水大變 被山寨魔獸超越==
作者: stomachache (胃痛)   2021-07-23 12:59:00
這舊聞了吧
作者: kaj1983   2021-07-23 12:59:00
魔獸包包怎麼了?XD
作者: chrisjeremy (Yomi)   2021-07-23 12:59:00
這是真的 別沒事妄想重構(血淚
作者: lomorobin (翰)   2021-07-23 13:00:00
記得COD系列最早的引擎也是從Quake改的 不知道有沒有類似的發現
作者: truegod000 (我是原住民)   2021-07-23 13:01:00
代表當時寫得好 XD
作者: haoboo (薩伊克斯)   2021-07-23 13:01:00
輪子不要重新發明本來就是程設的基本概念吧
作者: noname912301 (noname912301)   2021-07-23 13:02:00
初代工程師寫到叫媽媽?
作者: crazy6341556 (power_spike)   2021-07-23 13:04:00
好酷ㄝ
作者: NoLimination (啊啊啊啊)   2021-07-23 13:04:00
魔獸原始16格包:後來版本可用包越來越大 有玩家問16格包能加大或更換嗎? BZ一開始居然回:16格包寫在包包系統最上面 貿然更動可能毀天滅地
作者: Oskar (奧斯卡)   2021-07-23 13:05:00
其實算是 致敬、彩蛋 ? XDDDD
作者: inte629l   2021-07-23 13:05:00
真的沒事不要重構公司的code 出事你要扛的
作者: NoLimination (啊啊啊啊)   2021-07-23 13:06:00
過了一段時間後說:其實研究後加大也沒很難
作者: j022015 ( ˊ ﹀ˋ)   2021-07-23 13:07:00
表示當年有神手
作者: NoLimination (啊啊啊啊)   2021-07-23 13:07:00
然後魔獸別種意義上的崩毀就是另一個故事了
作者: kaj1983   2021-07-23 13:08:00
感謝回答,還有這種小故事XD
作者: kinosband (キノ)   2021-07-23 13:08:00
有趣
作者: NicoNeco ((゚д゚≡゚д゚))   2021-07-23 13:12:00
我也是先想到蜀漢老麵XDDD
作者: CactusFlower (仙人掌花)   2021-07-23 13:12:00
mmamammmmmammamamaaamammma
作者: rofellosx (鏖)   2021-07-23 13:12:00
不是bug本來就別碰
作者: cww7911   2021-07-23 13:12:00
滿好玩的
作者: WindSucker (抽風者)   2021-07-23 13:14:00
抓到抄襲
作者: waitan (微糖兒>////<)   2021-07-23 13:16:00
太環保了吧
作者: lomorobin (翰)   2021-07-23 13:17:00
其實Quake引擎是開源的
作者: CowBaoGan (直死之馬眼)   2021-07-23 13:19:00
side effect是個很可怕的東西 沒事真的別亂改...
作者: Giornno (喬魯諾.喬三槐)   2021-07-23 13:19:00
能抄就抄,能沿用就沿用,真的不得已要改也只改一部分,才是工程師的生存之道
作者: chihlee5566 (阿告)   2021-07-23 13:20:00
這段code比你資深
作者: ocean11 (深海)   2021-07-23 13:21:00
傳家寶
作者: bitcch (必可取)   2021-07-23 13:21:00
這還滿常見的 那段程式應該是包在共用模組內了
作者: sunnydragon7 (香腸)   2021-07-23 13:23:00
是的,手癢去造新的只會讓自己陷入debug輪迴
作者: aaaaajack (丁丁是個人才)   2021-07-23 13:23:00
笑死,發現這個也太厲害
作者: shampoopoo (毛寶洗髮精)   2021-07-23 13:24:00
祖傳程式碼 好可愛的稱呼XD
作者: sunnydragon7 (香腸)   2021-07-23 13:24:00
沒事別亂碰去重構
作者: iamnotgm (伽藍之黑)   2021-07-23 13:25:00
真的最早寫的和底層的code不要隨便去動 會出大事
作者: dripcoffee (冰滴咖啡)   2021-07-23 13:27:00
作者: oldriver (oldriver)   2021-07-23 13:29:00
16格包改版的當天就出bug了 真的是沒事不要動
作者: jokerjuju (juju)   2021-07-23 13:30:00
XDDD
作者: aegius1r (SC)   2021-07-23 13:30:00
V社: ...對! 這是彩蛋!
作者: jerrys0580 (墮落的阿它)   2021-07-23 13:30:00
XDDD
作者: newyellow (newyellow)   2021-07-23 13:33:00
從今天起 這也變成一個彩蛋了!
作者: hotrain13 (最幸運的人!!)   2021-07-23 13:34:00
oop優點啊
作者: LYS5566 (明燈❺❺❻❻)   2021-07-23 13:34:00
不得不說這個閃動也很有靈性 不然就不會祖傳了
作者: tetratio (徹拉修)   2021-07-23 13:35:00
滿有趣的
作者: buke (一坪的海岸線)   2021-07-23 13:42:00
這都是前人的血淚
作者: FKL (失眠)   2021-07-23 13:42:00
不過我聽人這段程式碼其實有問題https://bit.ly/3zmmAb2https://bit.ly/3x0al2g
作者: CaTkinGG (貓王)   2021-07-23 13:51:00
也許是太難改沒人想碰XD
作者: ilohoo (ilohoo)   2021-07-23 13:52:00
可以跑的程式碼就是沒問題的程式碼,有問題的是規格問題
作者: shec1213 (旭爺)   2021-07-23 13:53:00
能動,就不要動
作者: Vladivostok (海参崴)   2021-07-23 13:54:00
暴雪就是改了十六格包後跌落谷底,不要不信邪。
作者: onejoeluo (onejoe)   2021-07-23 14:10:00
0x5f3759df之後,又一個常數傳說
作者: abc22753939 (maple)   2021-07-23 14:23:00
// 我也不知道這段在幹嘛 最好別動它
作者: spfy (spfy)   2021-07-23 14:26:00
新人工程師最常犯的錯誤:我覺得這邊應該要改掉
作者: arcanite (不問歲月任風歌)   2021-07-23 14:28:00
蜀漢老麵XDD
作者: energyy1104 (Bill Wang)   2021-07-23 14:29:00
這麼大的專案很容易改一小段就整組壞掉
作者: rippleofmoon (月支漣漪)   2021-07-23 14:31:00
Half life到底要不要出三了
作者: lbowlbow (沉睡的小貓)   2021-07-23 14:32:00
完全同意,老東西要嘛整個放棄要嘛死都不要改
作者: snowcloud (雪)   2021-07-23 14:32:00
沒測試,要refactor 老code 太危險,當然就盡量不要改
作者: lomorobin (翰)   2021-07-23 14:33:00
新人:這一行mmaamma是啥 老人:我是你就不會多問
作者: Bencrie   2021-07-23 14:34:00
你們的版控是裝飾品嗎 XD
作者: kaj1983   2021-07-23 14:37:00
可以用幹嘛改?不能用的時候再說
作者: HHH555JJJ (皕R實驗)   2021-07-23 14:43:00
Legacy Code
作者: MDay56 (他媽媽衝擊波)   2021-07-23 14:45:00
很酷 XDDDD
作者: mirror0227 (鏡子)   2021-07-23 14:48:00
俄羅斯也有一個當了20年的總統 還好啦
作者: k798976869 (kk)   2021-07-23 14:53:00
工程師:PM叫我複製貼上就好
作者: bobyhsu (專業收費代洗文章)   2021-07-23 14:57:00
到底有沒有人在看內文.. 這都能說因為太難?
作者: s942816   2021-07-23 15:04:00
System.out.println("Hello World!");
作者: acpupu (shabadibiduwabadiyeah)   2021-07-23 15:09:00
mmamammmmmammamamaaamammma
作者: butten986 (白色的惡魔)   2021-07-23 15:10:00
發現的肯定是鐵粉
作者: dargen78 (鏡月)   2021-07-23 15:10:00
我是不知道這難不難,但我聽過有遊戲刪了一張資料夾裡完全沒關聯的圖片就會完全啟動不了的
作者: tobe0105 (Kanaheei_)   2021-07-23 15:11:00
名字都不用改呢
作者: storyo11413 (小便)   2021-07-23 15:11:00
大驚小怪,除非要最佳化不然能跑的東西變error會哭
作者: seatan (小海炭)   2021-07-23 15:22:00
文組覺得不思議~不過閃燈QQ怕
作者: xiaohua (大花)   2021-07-23 15:44:00
imgur其實有大小跟時長限制
作者: cn5566 (西恩)   2021-07-23 15:51:00
這就是legacy啊 只要不會出錯大家都會respect誰敢在pull request上動這段保證被reject
作者: JamesChen (James)   2021-07-23 15:55:00
稍微有點程式經驗的人都會這樣做事情。
作者: age200 (Sleeping horse)   2021-07-23 16:07:00
推個
作者: chasegirl (chasegirl)   2021-07-23 16:21:00
Ptt都不知道反覆用幾年了
作者: willson2000 (willson0761)   2021-07-23 16:44:00
發現這件事的人太酷了
作者: dk2486248 (暴風小雪)   2021-07-23 16:55:00
OOP
作者: broodkey (broodkey)   2021-07-23 18:06:00
雖然說沒什麼好改的,但是能用20年還原封不動也是很有...紀律

Links booklink

Contact Us: admin [ a t ] ucptt.com