第 17 章 技能合成:位移與碰撞

更新 發佈閱讀 11 分鐘

第 17 章 技能合成:位移與碰撞

三境的腳本能力,和他想像中的不太一樣。

陸離原本以為「撰寫現實腳本」這件事,應該像寫程式一樣:有一個固定的語法,有一份可以參照的文件,有已知的函數庫,你照著規則寫,系統照著你寫的跑。

但腳本編輯器的介面是空白的,沒有文件,沒有自動補全,沒有任何提示說什麼語法是有效的,什麼會報錯。它等著你寫,你寫什麼,它就嘗試執行什麼,然後給你一個結果,告訴你成功還是失敗,如果失敗,原因是什麼。

第一天,他試了二十幾個腳本,成功了三個,失敗的原因各不相同——有些是「目標物件的代碼層不允許外部寫入」,有些是「指令超過當前算力上限」,有些是「操作邏輯存在矛盾,系統拒絕執行」,還有一個直接是「語法無法解析」,也就是他寫的東西連系統的邏輯層都看不懂。

第二天,他換了思路,從物理參數下手——這個世界的物理法則都是代碼函數,他在一境的時候就能讀到重力是 gravity.loop,那麼修改這個函數的輸入值,就等於修改重力效果。他試著給一個廢棄鐵桶施加一個向上的重力偏移:

Script:
Target: Object_iron_bucket_01
Parameter: gravity.acceleration
Override_value: -4.8 (reverse, half-strength)
Duration: 10s

成功了。鐵桶輕微地升起來,大約離地半公尺,顫顫巍巍的,像是被一根很細的繩子從上面吊著,十秒之後落下來,在地面上彈了兩下,完全恢復正常。

他盯著那個鐵桶,在腦子裡把這個結果消化了一遍。


謝鳴山在旁邊觀察了他兩天,第三天說:「你現在想要的,是把它用在移動上。」

「對,」陸離說,「但移動涉及的變數比改一個靜態物件的重力複雜得多,我沒辦法只改重力,我還需要讓自己的動量和修改後的物理環境保持一致,不然我的身體會直接撞上什麼東西或者摔下去。」

「你知道問題在哪裡,」謝鳴山說,「但你現在是一個人同時試圖解決物理力學和代碼邏輯兩個問題。分開來,先解決一個。」

「先解決哪個?」

「先解決碰撞,」謝鳴山說,「移動腳本之所以危險,不是因為你升起來很難,是因為你停下來很難。你弄清楚怎麼控制碰撞參數,移動才是真的移動,不是被拋出去。」

這是他在 SMD 的工作經驗裡來的東西,陸離把這個邏輯轉了一圈,點了頭。


他們今天在鐵南區的一個廢棄廠房裡。謝鳴山說這裡的代碼精度夠低,訓練產生的能量波動不會觸發 SMD 的自動預警,但前提是不要做太大的腳本,保持在單物件操作的範圍內。

林曉晴在廠房的外圍放了一個代碼感知警戒——如果有任何帶有 SMD 標記的實體進入三百公尺範圍,她會收到信號。余浩然沒有來,他還在整理基地的幽靈代碼筆記。

陸離在廠房中間的空地上,找了幾個不同材質的廢棄物件,一個鐵桶、一根鋼管、一塊混凝土碎片,把它們排成一排,開始做碰撞測試。

碰撞在代碼層裡的函數是 collision.response,它決定了兩個物件相交的時候,動量和能量怎麼分配。陸離試著讀這個函數的結構:

collision.response(Object_A, Object_B):
relative_velocity = A.velocity - B.velocity
impulse = (1 + coefficient_restitution) * relative_velocity / (1/A.mass + 1/B.mass)
A.velocity -= impulse / A.mass
B.velocity += impulse / B.mass

很標準的物理碰撞公式,coefficient_restitution 是彈性係數,決定碰撞後的回彈程度。他試著把這個係數調成 0——完全非彈性碰撞,物件相交後不反彈,直接黏在一起:

Script:
Target: Object_concrete_01
Parameter: collision.response.coefficient_restitution
Override_value: 0.0
Duration: 30s

然後他往那塊混凝土碎片踢了一腳。

混凝土在地面上滑行,撞上了鋼管,正常情況下應該彈開,但這次撞上去之後,它停了,靜止了,像是突然被一隻看不見的手按住,完全沒有回彈。

「有意思,」謝鳴山說,「你現在明白這個參數了。」

「我需要的是反過來,」陸離說,「如果我要做位移腳本,我需要當自己撞上什麼東西的時候,碰撞係數是可控的,不是固定的系統值。高速撞牆就應該死,但我可以在撞之前把係數臨時調高,讓碰撞後我的速度損失降低,然後繼續移動。」

謝鳴山在旁邊沉默地想了一下,「你說的不是一個腳本,是兩個腳本的組合——一個負責動量,一個負責碰撞——你需要讓它們同時運行,不能有時間差。」

「能同時運行兩個腳本嗎?」陸離問。

謝鳴山看了他一眼,「你是三境,嘗試過才能知道你的上限在哪裡。」


他花了大約兩個小時失敗了七次。

同時運行兩個腳本的難度不在於腳本本身,在於注意力——他的算力值在運行第一個腳本的時候需要維持一部分持續輸入,第二個腳本同時啟動,他需要把剩下的注意力分出去,讓兩個腳本各自有足夠的算力維持,不互相搶資源。

失敗的時候,通常是其中一個腳本的算力供給跌破了維持閾值,腳本自動中斷,或者是兩個腳本的物理參數之間出現邏輯矛盾,系統返回一個衝突報錯。

第八次,他換了一個方式:不是把兩個腳本當成兩個獨立的程序去同時跑,而是把它們合在一起,寫成一個腳本,讓碰撞係數的調整成為動量腳本的一個內嵌子程序,在動量腳本執行的過程中,根據探測到的碰撞即時觸發係數調整。

這樣它們共用一個算力通道,不存在競爭,邏輯也更清晰:

Script: Displacement_v1
Phase_1: Apply_force(target=self, direction=forward, magnitude=3.0, duration=0.5s)
Phase_2 [conditional, trigger=collision_detected]:
Override: self.collision.response.coefficient_restitution = 0.15
Duration: 0.2s
Then: Resume_velocity(inherit_momentum=TRUE)
Compute_cost_estimate: 31 / execution

他在廠房的廢料堆旁邊試了第一次。

往前跑,然後往一堵舊磚牆的方向,沿著一個斜角撞過去,腳本觸發——他感覺到碰撞的瞬間代碼層有一個響應,衝擊力被大幅吸收,動量重新分配,他的身體沿著角度滑出去,沒有硬停,沒有反彈,而是把速度轉向了一個新的方向,繼續向前。

不完美,他出去的角度有點偏,落地的時候有輕微失衡,膝蓋幾乎觸地,但他沒有撞傷,也沒有停下來。

他站起來,扶了一下牆,把那個腳本的執行記錄在腦子裡重播了一遍,找到了角度偏差的原因:衝擊向量的分解計算有一個小錯誤,他把自身的移動速度和物件相對速度的分量混掉了。

他在腳本編輯器裡修正那一行,再試一次。

第二次,角度正確了,他從牆邊滑出去,落地穩,接著往另一面牆的方向繼續跑,第二次碰撞,同樣的腳本觸發,這次他出來的方向幾乎和他計算的完全一致。

林曉晴在廠房門口看著,「你剛才做的是什麼?」

「位移腳本 v1,」陸離說,「借牆轉向,不是硬停,」他拍了一下膝蓋上的灰,「現在只能用在我自己身上,速度還很慢,以後可以再調。」

「你是在用代碼改寫自己的碰撞物理,」林曉晴說,語氣是那種讀到了什麼事情的平靜。

「是,算是一個微型位移引擎,需要連續運行的部分很少,大部分是事件觸發,算力消耗可以接受。」

謝鳴山走過來,往他剛才跑過的路線看了一眼,「你花了兩個小時,七次失敗,第八次合并腳本,第九次成功,第十次穩定。」

「你在計次,」陸離說。

「我想知道你的學習效率,」謝鳴山說,「十次。好。」


下午,他們在廠房裡繼續。陸離把位移腳本做了幾個變體,測試了不同地形條件下的碰撞角度,記錄了每一個案例的向量數據,在腳本裡加入了更精細的動量繼承算法。

謝鳴山在旁邊不說話,只有在他問問題的時候才回答,或者在他的腳本邏輯出現基礎性錯誤的時候輕描淡寫地指出一句。

「你在 SMD 的時候,你的腳本是什麼方向的?」陸離問,在一次測試的間隔裡。

謝鳴山想了一下,「封閉類,偏防御和陣地型的,不適合移動。我的特性和你不一樣,你是系統感知超標,我是系統干擾——讓某個區域的代碼層產生混亂,讓對方在那個區域的所有操作都出錯,或者把某個系統事件卡在觸發和執行之間的間隙裡,讓它永遠沒辦法完成。」

「所以你逃跑的時候用的是讓追你的人的代碼能力失效,不是跑得比他們快。」

「對,」謝鳴山說,帶著一種說不清楚是自嘲還是純粹陳述的語氣,「我跑得不快,但他們追不上我,因為追到一半,他們的腳本開始報錯。」

「那你當初逃出 SMD——」

「那是另一個故事,」謝鳴山說,「你現在專心在你的腳本上。」

陸離把這個話題收起來,沒有繼續問。


傍晚,他們準備離開的時候,林曉晴的感知警戒觸發了一次輕微的響應,然後消失,她說那個方向的信號特徵不像維護組,更像是某個普通路過的覺醒者,沒有 SMD 標記。陸離用他改進後的假雨遺留數據(假雨已經停了,但他在本地存了一份覆蓋範圍的代碼密度基準)交叉確認了一下,沒有異常。

走出廠房,外面的夜已經來了,鐵南區在代碼視角裡是那種特有的低密度沉默——標籤很少,渲染很稀,世界在這裡的運算就像電腦風扇轉速很低的時候,很安靜,很省力。

「位移腳本 v1,」林曉晴走在旁邊,沒有回頭,「你打算叫它什麼名字?」

「這個要取名字?」

「覺醒者的習慣,給常用的腳本取名,方便溝通,」她說,「你可以叫它撞牆術,技術上是準確的。」

「聽起來不太好,」陸離說。

「那你說。」

他走了幾步,想了想,「Ricochet,彈射。在槍戰裡,是子彈打在硬表面上改變方向繼續飛的動作,不是停下來,是轉向繼續。」

林曉晴想了一秒,「可以,比撞牆術好一點。」

留言
avatar-img
艾利斯幻想旅程
9會員
514內容數
網路世界是一個充滿多元性與無限可能的空間,人們可以在此分享資訊、交流思想,並展現無盡的創造力。然而,隨著社交媒體和線上論壇的普及,一種有趣且獨特的現象也隨之興起——廢文。廢文指的是那些內容看似無聊、無害,或表面上毫無意義的帖子、留言或圖片,通常目的在於娛樂或逗趣,而非提供實質價值的資訊。
艾利斯幻想旅程的其他內容
2026/02/22
陸離和同伴前往閘口路十一號地下層,發現了他舊版本留下的代碼簽名。接觸簽名的瞬間,三境解鎖,他寫出了第一個遮罩腳本,將這個被遺忘的空間變成覺醒者的新據點。
2026/02/22
陸離和同伴前往閘口路十一號地下層,發現了他舊版本留下的代碼簽名。接觸簽名的瞬間,三境解鎖,他寫出了第一個遮罩腳本,將這個被遺忘的空間變成覺醒者的新據點。
2026/02/22
假雨在凌晨兩點四十七分停止。 音頻事件的計時器到了,Status: STOPPED,覆蓋半徑三百公尺的環境音驟然收場,最後幾秒鐘裡,雨聲稀了,然後停了,就像一場真正的雨慢慢變小最後消失,連收尾都做得很仔細。 陸離在停止的一刻記下了最後一批數據,然後把感知收回來。他已經在那個頻道裡待了將近四個小時
2026/02/22
假雨在凌晨兩點四十七分停止。 音頻事件的計時器到了,Status: STOPPED,覆蓋半徑三百公尺的環境音驟然收場,最後幾秒鐘裡,雨聲稀了,然後停了,就像一場真正的雨慢慢變小最後消失,連收尾都做得很仔細。 陸離在停止的一刻記下了最後一批數據,然後把感知收回來。他已經在那個頻道裡待了將近四個小時
2026/02/22
那一天下午三點,開始下雨。 或者說,開始有雨聲。 陸離在二樓的基地裡,坐在窗邊看書——余浩然上週給了他一份手寫的代碼修煉基礎文件,密密麻麻的,大部分是系統理論,他在慢慢啃,有些地方需要反覆讀幾遍才能想通。外面的巷子是窄的,對面是舊磚牆,下午的光線斜斜地落在磚縫裡,很靜。 然後雨聲來了。 先是
2026/02/22
那一天下午三點,開始下雨。 或者說,開始有雨聲。 陸離在二樓的基地裡,坐在窗邊看書——余浩然上週給了他一份手寫的代碼修煉基礎文件,密密麻麻的,大部分是系統理論,他在慢慢啃,有些地方需要反覆讀幾遍才能想通。外面的巷子是窄的,對面是舊磚牆,下午的光線斜斜地落在磚縫裡,很靜。 然後雨聲來了。 先是
看更多