精華區beta C_Chat 關於我們 聯絡資訊
玩家發現了一條遊戲公司反覆使用了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 -- https://i.imgur.com/cwNHMPB.png https://i.imgur.com/JsjWVt9.png https://i.imgur.com/E7YduYM.png https://i.imgur.com/FprCNk0.png https://i.imgur.com/SS2B6YF.png https://i.imgur.com/NwfCs6o.png -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.132.75 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1627015561.A.AA8.html
WhoChaos: 有趣 07/23 12:47
lordaelon: 簽名檔優質 07/23 12:47
YuzanJhang: 太酷了吧 07/23 12:47
DarkyIsCat: 酷 07/23 12:47
vsepr55: 這就是oop的奧義 07/23 12:49
wk415937: 滿有趣的 07/23 12:49
bobby4755: 有趣 07/23 12:49
gn02218236: 高重用性的最佳實作 07/23 12:49
a2334436: 這也沒甚麼必要改吧 07/23 12:49
none049: 酷欸.jpg 07/23 12:50
lazarus1121: 就跟Lorem ipsum dolor sit amet一樣意思吧 07/23 12:50
lazarus1121: 業界總會有些經常拿來使用的東西 07/23 12:51
Ericz7000: 也才小東西而已 沒什麼好改的吧 07/23 12:51
ppgame: 你這篇文也反覆使用 07/23 12:52
dannyshan: 公司內部素材? 07/23 12:52
ga2006221985: 為什麼我看那GIF好像有音樂== 07/23 12:52
k960608: op了 你這也是祖傳反覆使用嗎 07/23 12:52
s7503228: !? 原來有人發了嗎 07/23 12:53
s7503228: 哇靠真的耶 07/23 12:53
naya7415963: 能從燈光閃爍看出既視感也是滿厲害的 07/23 12:53
tym7482: 多一事不如少一事 07/23 12:54
jim924211: 舊程式還真的是不要動,動了出其他問題更麻煩 07/23 12:54
iam0718: 想到魔獸包包 07/23 12:56
saiga12416: 蜀漢老麵嘛wwwww 07/23 12:56
r85270607: #1W-LQKA1 (C_Chat) 07/23 12:57
RevanHsu: 魔獸16格包就是動了風水大變 被山寨魔獸超越== 07/23 12:57
stomachache: 這舊聞了吧 07/23 12:59
kaj1983: 魔獸包包怎麼了?XD 07/23 12:59
chrisjeremy: 這是真的 別沒事妄想重構(血淚 07/23 12:59
lomorobin: 記得COD系列最早的引擎也是從Quake改的 不知道有沒有 07/23 13:00
lomorobin: 類似的發現 07/23 13:00
truegod000: 代表當時寫得好 XD 07/23 13:01
haoboo: 輪子不要重新發明本來就是程設的基本概念吧 07/23 13:01
noname912301: 初代工程師寫到叫媽媽? 07/23 13:02
crazy6341556: 好酷ㄝ 07/23 13:04
NoLimination: 魔獸原始16格包:後來版本可用包越來越大 有玩家問 07/23 13:04
NoLimination: 16格包能加大或更換嗎? BZ一開始居然回:16格包寫 07/23 13:04
NoLimination: 在包包系統最上面 貿然更動可能毀天滅地 07/23 13:04
Oskar: 其實算是 致敬、彩蛋 ? XDDDD 07/23 13:05
inte629l: 真的沒事不要重構公司的code 出事你要扛的 07/23 13:05
NoLimination: 過了一段時間後說:其實研究後加大也沒很難 07/23 13:06
j022015: 表示當年有神手 07/23 13:07
NoLimination: 然後魔獸別種意義上的崩毀就是另一個故事了 07/23 13:07
kaj1983: 感謝回答,還有這種小故事XD 07/23 13:08
kinosband: 有趣 07/23 13:08
NicoNeco: 我也是先想到蜀漢老麵XDDD 07/23 13:12
CactusFlower: mmamammmmmammamamaaamammma 07/23 13:12
rofellosx: 不是bug本來就別碰 07/23 13:12
cww7911: 滿好玩的 07/23 13:12
WindSucker: 抓到抄襲 07/23 13:14
waitan: 太環保了吧 07/23 13:16
lomorobin: 其實Quake引擎是開源的 07/23 13:17
CowBaoGan: side effect是個很可怕的東西 沒事真的別亂改... 07/23 13:19
Giornno: 能抄就抄,能沿用就沿用,真的不得已要改也只改一部分, 07/23 13:19
Giornno: 才是工程師的生存之道 07/23 13:19
CowBaoGan: 有需求我寧願自己寫新的 07/23 13:19
chihlee5566: 這段code比你資深 07/23 13:20
ocean11: 傳家寶 07/23 13:21
bitcch: 這還滿常見的 那段程式應該是包在共用模組內了 07/23 13:21
sunnydragon7: 是的,手癢去造新的只會讓自己陷入debug輪迴 07/23 13:23
aaaaajack: 笑死,發現這個也太厲害 07/23 13:23
shampoopoo: 祖傳程式碼 好可愛的稱呼XD 07/23 13:24
sunnydragon7: 沒事別亂碰去重構 07/23 13:24
iamnotgm: 真的最早寫的和底層的code不要隨便去動 會出大事 07/23 13:25
dripcoffee: http://i.imgur.com/t7yVASk.jpg 07/23 13:27
oldriver: 16格包改版的當天就出bug了 真的是沒事不要動 07/23 13:29
jokerjuju: XDDD 07/23 13:30
aegius1r: V社: ...對! 這是彩蛋! 07/23 13:30
jerrys0580: XDDD 07/23 13:30
newyellow: 從今天起 這也變成一個彩蛋了! 07/23 13:33
hotrain13: oop優點啊 07/23 13:34
LYS5566: 不得不說這個閃動也很有靈性 不然就不會祖傳了 07/23 13:34
tetratio: 滿有趣的 07/23 13:35
buke: 這都是前人的血淚 07/23 13:42
FKL: 不過我聽人這段程式碼其實有問題 07/23 13:42
FKL: https://bit.ly/3zmmAb2 07/23 13:43
FKL: https://bit.ly/3x0al2g 07/23 13:46
CaTkinGG: 也許是太難改沒人想碰XD 07/23 13:51
ilohoo: 可以跑的程式碼就是沒問題的程式碼,有問題的是規格問題 07/23 13:52
shec1213: 能動,就不要動 07/23 13:53
Vladivostok: 暴雪就是改了十六格包後跌落谷底,不要不信邪。 07/23 13:54
onejoeluo: 0x5f3759df之後,又一個常數傳說 07/23 14:10
abc22753939: // 我也不知道這段在幹嘛 最好別動它 07/23 14:23
spfy: 新人工程師最常犯的錯誤:我覺得這邊應該要改掉 07/23 14:26
arcanite: 蜀漢老麵XDD 07/23 14:28
energyy1104: 這麼大的專案很容易改一小段就整組壞掉 07/23 14:29
rippleofmoon: Half life到底要不要出三了 07/23 14:31
lbowlbow: 完全同意,老東西要嘛整個放棄要嘛死都不要改 07/23 14:32
snowcloud: 沒測試,要refactor 老code 太危險,當然就盡量不要改 07/23 14:32
lomorobin: 新人:這一行mmaamma是啥 老人:我是你就不會多問 07/23 14:33
Bencrie: 你們的版控是裝飾品嗎 XD 07/23 14:34
kaj1983: 可以用幹嘛改?不能用的時候再說 07/23 14:37
HHH555JJJ: Legacy Code 07/23 14:43
MDay56: 很酷 XDDDD 07/23 14:45
mirror0227: 俄羅斯也有一個當了20年的總統 還好啦 07/23 14:48
k798976869: 工程師:PM叫我複製貼上就好 07/23 14:53
bobyhsu: 到底有沒有人在看內文.. 這都能說因為太難? 07/23 14:57
s942816: System.out.println("Hello World!"); 07/23 15:04
acpupu: mmamammmmmammamamaaamammma 07/23 15:09
butten986: 發現的肯定是鐵粉 07/23 15:10
dargen78: 我是不知道這難不難,但我聽過有遊戲刪了一張資料夾裡完 07/23 15:10
dargen78: 全沒關聯的圖片就會完全啟動不了的 07/23 15:10
tobe0105: 名字都不用改呢 07/23 15:11
storyo11413: 大驚小怪,除非要最佳化不然能跑的東西變error會哭 07/23 15:11
seatan: 文組覺得不思議~不過閃燈QQ怕 07/23 15:22
xiaohua: imgur其實有大小跟時長限制 07/23 15:44
cn5566: 這就是legacy啊 只要不會出錯大家都會respect 07/23 15:51
cn5566: 誰敢在pull request上動這段保證被reject 07/23 15:51
JamesChen: 稍微有點程式經驗的人都會這樣做事情。 07/23 15:55
age200: 推個 07/23 16:07
chasegirl: Ptt都不知道反覆用幾年了 07/23 16:21
willson2000: 發現這件事的人太酷了 07/23 16:44
dk2486248: OOP 07/23 16:55
broodkey: 雖然說沒什麼好改的,但是能用20年還原封不動也是很有.. 07/23 18:06
broodkey: .紀律 07/23 18:06
papple23g: how to make flash light. google.copy.paste 07/23 18:27
tt8otw: 蠻有趣 07/23 18:51
tweence: 07/23 21:30
cheng31507: 蠻好玩的 07/23 21:37
questionboy: 可以過卡馬克那關 應該是夠厲害了 07/23 21:55
PigBlood: XDDDD 07/24 03:38
dixieland999: 一堆人在挖HL的彩蛋,畢竟不知道V社到底藏了多少 07/24 11:35
yudofu: 工程師結婚的時候送新娘的是他阿嬤給他的祖傳程式碼 07/25 00:57