玩家發現了一條遊戲公司反覆使用了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
作者: DarkyIsCat (黑肉貓娘讚) 2021-07-23 12:47:00
酷
作者:
vsepr55 (vsepr55)
2021-07-23 12:49:00這就是oop的奧義
作者: 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
就跟Lorem ipsum dolor sit amet一樣意思吧業界總會有些經常拿來使用的東西
作者:
Ericz7000 (Ericz7000nolan)
2021-07-23 12:51:00也才小東西而已 沒什麼好改的吧
作者:
ppgame (虎紋蜜瓜)
2021-07-23 12:52:00你這篇文也反覆使用
作者:
k960608 (霧羽‧浪沙)
2021-07-23 12:52:00op了 你這也是祖傳反覆使用嗎
作者:
tym7482 (Max)
2021-07-23 12:54:00多一事不如少一事
作者:
iam0718 (999)
2021-07-23 12:56:00想到魔獸包包
作者:
RevanHsu (The Aquanaut)
2021-07-23 12:57:00魔獸16格包就是動了風水大變 被山寨魔獸超越==
記得COD系列最早的引擎也是從Quake改的 不知道有沒有類似的發現
作者:
haoboo (薩伊克斯)
2021-07-23 13:01:00輪子不要重新發明本來就是程設的基本概念吧
作者: NoLimination (啊啊啊啊) 2021-07-23 13:04:00
魔獸原始16格包:後來版本可用包越來越大 有玩家問16格包能加大或更換嗎? BZ一開始居然回:16格包寫在包包系統最上面 貿然更動可能毀天滅地
作者:
Oskar (奧斯卡)
2021-07-23 13:05:00其實算是 致敬、彩蛋 ? XDDDD
作者: NoLimination (啊啊啊啊) 2021-07-23 13:06:00
過了一段時間後說:其實研究後加大也沒很難
作者:
j022015 ( ˊ ﹀ˋ)
2021-07-23 13:07:00表示當年有神手
作者: NoLimination (啊啊啊啊) 2021-07-23 13:07:00
然後魔獸別種意義上的崩毀就是另一個故事了
作者:
NicoNeco ((゚д゚≡゚д゚))
2021-07-23 13:12:00我也是先想到蜀漢老麵XDDD
mmamammmmmammamamaaamammma
作者: cww7911 2021-07-23 13:12:00
滿好玩的
作者:
waitan (微糖兒>////<)
2021-07-23 13:16:00太環保了吧
side effect是個很可怕的東西 沒事真的別亂改...
作者:
Giornno (喬魯諾.喬三槐)
2021-07-23 13:19:00能抄就抄,能沿用就沿用,真的不得已要改也只改一部分,才是工程師的生存之道
作者:
ocean11 (深海)
2021-07-23 13:21:00傳家寶
作者:
bitcch (必可取)
2021-07-23 13:21:00這還滿常見的 那段程式應該是包在共用模組內了
作者:
iamnotgm (ä¼½è—之黑)
2021-07-23 13:25:00真的最早寫的和底層的code不要隨便去動 會出大事
作者:
oldriver (oldriver)
2021-07-23 13:29:0016格包改版的當天就出bug了 真的是沒事不要動
作者:
newyellow (newyellow)
2021-07-23 13:33:00從今天起 這也變成一個彩蛋了!
作者:
hotrain13 (最幸é‹çš„人!!)
2021-07-23 13:34:00oop優點啊
作者:
LYS5566 (明燈❺❺❻❻)
2021-07-23 13:34:00不得不說這個閃動也很有靈性 不然就不會祖傳了
作者:
buke (一坪的海岸線)
2021-07-23 13:42:00這都是前人的血淚
作者:
FKL (失眠)
2021-07-23 13:42:00作者:
ilohoo (ilohoo)
2021-07-23 13:52:00可以跑的程式碼就是沒問題的程式碼,有問題的是規格問題
作者: shec1213 (旭爺) 2021-07-23 13:53:00
能動,就不要動
作者: abc22753939 (maple) 2021-07-23 14:23:00
// 我也不知道這段在幹嘛 最好別動它
作者:
spfy (spfy)
2021-07-23 14:26:00新人工程師最常犯的錯誤:我覺得這邊應該要改掉
作者:
arcanite (不問歲月任風歌)
2021-07-23 14:28:00蜀漢老麵XDD
作者:
lbowlbow (沉睡的小貓)
2021-07-23 14:32:00完全同意,老東西要嘛整個放棄要嘛死都不要改
作者: snowcloud (雪) 2021-07-23 14:32:00
沒測試,要refactor 老code 太危險,當然就盡量不要改
新人:這一行mmaamma是啥 老人:我是你就不會多問
作者:
MDay56 (他媽媽衝擊波)
2021-07-23 14:45:00很酷 XDDDD
作者: k798976869 (kk) 2021-07-23 14:53:00
工程師:PM叫我複製貼上就好
作者:
bobyhsu (專業收費代洗文章)
2021-07-23 14:57:00到底有沒有人在看內文.. 這都能說因為太難?
System.out.println("Hello World!");
作者:
acpupu (shabadibiduwabadiyeah)
2021-07-23 15:09:00mmamammmmmammamamaaamammma
我是不知道這難不難,但我聽過有遊戲刪了一張資料夾裡完全沒關聯的圖片就會完全啟動不了的
作者: 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:00imgur其實有大小跟時長限制
作者:
cn5566 (西恩)
2021-07-23 15:51:00這就是legacy啊 只要不會出錯大家都會respect誰敢在pull request上動這段保證被reject
作者: age200 (Sleeping horse) 2021-07-23 16:07:00
推個
作者:
chasegirl (chasegirl)
2021-07-23 16:21:00Ptt都不知道反覆用幾年了
作者:
broodkey (broodkey)
2021-07-23 18:06:00雖然說沒什麼好改的,但是能用20年還原封不動也是很有...紀律