[闲聊] 玩家发现了一条游戏公司反复使用了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