最近工作告一個段落, 想到該寫個 blog 紀錄一下發生甚麼事情. 登入之後發現自己已經半年多沒有寫 blog 了…
很普通的藉口就是忙. 在半年前申請完延畢之後, 多出來的一學期也都是在找工作. 跟以前提到的一樣, 在美國沒有關係工作會很難找. 又剛好我們學校有關係兩家的都好像不是很喜歡我… 自己找的只有 Amazon 跑到電話面試第三輪, 然後在 onsite 前被刷掉.
就在最後一學期要畢業的時候, 有一家在 Creative Head 看到的公司發了考卷過來. 而且是很詭異的考卷, 題目不難, 但是規定只能用 C 寫. 那時候想說大概是他們忘記加上加上 C++ , 結果不是, 他們真的要 C 而且還是 C89 . 因為狀況很詭異, 加上他們家是做運動遊戲的, 然後我是運動完全不熟的阿宅. 所以一開始還有點抗拒, 結果考卷一做完馬上 onsite 的來回機票就來了.
onsite 也是個很奇妙雜亂的過程, 不過總之我現在就在這裡落戶了. 大家都叫 2K Sports , 不過正式的名稱是 Visual Concepts Studio . 2K( 正確來說應該叫 Take-Two Interactive ) 其實是 Visual Concepts 的第三任老闆. 2K 之前是 Sega , 再之前是 EA .
菜鳥工程師被發派的到的組好像都是我這個 Presentation Group . 不過這個組到底是做啥的好像全公司都沒有人知道, 我們工作大宗是做過場動畫跟維護一套 Scripting language . 但是我們已經有 Front End 跟 AI 組了, 為什麼還要再生一個 Presentation ? 這其中的歷史, 現在已經沒有人知曉了. 本來一開始是在做那個 Scripting language 編輯器 ( in C# ), 但是後來遊戲本體的 bug 多到滿出來, 加上壓片的時間又近了. 只好趕鴨子上架, 跟著抓蟲.
老實說在這抓蟲 還. 蠻. 痛. 苦. 的… 一個原因是因為整個 code base 很大, 大到整個讀進 Visual Studio 一定會把 Visual Studio 炸掉. 不過這當然是次要的原因, 有稍微念過軟體工程的都知道如果 interface / module 有好好切. 是不需要跑整個 code base 的. 但這也就帶出主要的原因了, 就是這 code based 超級老又超級醜 …0rz 因為一年要出一款遊戲, 很多時候大家就是便宜行事, 繞過該有的架構. 如果做完遊戲之後有好好修回去的話那就算了, 但是實際上是大家都這樣繞, 然後這種東西累積了十五年以上. (最老的 code 的最後修改是 1996)
一個小故事是 NBA 2K 裡面有即時戰術, Pass and Go, Icon Pass, 還有戰術提示四種東西會在玩家頭上畫按鈕. 然後有人在 issue tracker 報說如果你同時下戰術命令跟 Icon Pass , 會有兩組按鈕被畫出來. 希望的結果應該是同時只能有一組被畫出來. 恩… 就是加個 flag , 一個畫的時候叫另一個不要出來亂, 花不了多久吧? 好啦, 請各位猜猜我花了多久?
答案是三天, 因為這四種東西是用四種完全不同的方式畫的. 一個是用現在的 Scripting language, 一個是用上一版的 Scripting language , 一個是把 icon 做成 Maya file 直接餵進 model renderer , 最後一個是綁架最底層 draw call 跑 draw quad . 然後除了第一個, 其他的都沒有 documentation , 當初寫的人也都跑光了… 最後只能跑 XBox 360 profiler 然後把 draw call 一個一個挑出來看他們到底躲在哪…0rz 大家都說 NBA 2K 要出新作品只要改數據就好, 為什麼做到這麼難過. 實際上就真的是改數據很難…
在這裡就是會覺得很認知失調, 絕大多數的時候你會看到讓你血淚的 code . 但是當你翻到很核心的東西的時候, 又會發現怪物. 我們這邊用的語言叫做 Visual Concepts C , 他其實有一部分的 C++ . 有 Class , 能做 polymorphism, virtual function 跟 overloading . 沒有 template 支援. 同時有很多額外文法做家用主機上的 data alignment. 但是它不是閹割 C++ 的語言, 某人是從 C89 一路加上來的. 沒錯, 手工改造 C89 的 Lexical Analyzar , 手工雕 Compiler , 手工雕 Make, 然後拿來做遊戲.
Seriously?
這大概就是為什麼我們家裡面 in-house tool 這麼多的原因了. 當年有神人首開風氣. 不過老實說絕大多數後來做的 tool 用起來還是蠻血淚的 :/
(未完待續)