最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

[CE][IL2CPP][東方夜雀食堂]替換符卡特效(拒絕光污染!)

2023-05-18 08:27 作者:geleisisisi  | 我要投稿

玩了東方夜雀食堂一段時(shí)間后,我實(shí)在是受不了了。

雖然這游戲給了一個(gè)關(guān)閉符卡動(dòng)畫的選項(xiàng),但是符卡附帶的技能特效還是會(huì)出現(xiàn)。

這其實(shí)也沒啥。問題是有些稀客的符卡特效做的實(shí)在是一言難盡。亂七八糟、刺眼奪目、大紅大紫、土味十足、俗不可耐,關(guān)鍵是還TM強(qiáng)迫觀看。就比如黑谷山女的特效:

一晚上放個(gè)五次她的符卡,我覺得我的眼睛都要被閃瞎了,制作組不會(huì)覺得這種特效很cool吧?

半年前我就跟制作組反映過這個(gè)問題,但是直到現(xiàn)在我也沒找到關(guān)閉特效的選項(xiàng)。

那只能自己動(dòng)手,豐衣足食了。

前言:

  • 本文的所有地址基于steam 2.4.1d版本

  • 作者已經(jīng)提前導(dǎo)出了Assembly-CSharp.dll。方法與大俠立志傳安裝mod的方法一模一樣,只是安裝時(shí)有可能需要梯子來下載必要文件。

  • 使用的CE版本為7.5,且確保了Activate mono features被激活

定位要修改的位置:

首先,需要選擇一個(gè)切入點(diǎn)。

既然是想要修改符卡特效,必定要先找到這個(gè)符卡。

通常來說,符卡釋放后會(huì)帶來一系列的改變。通過這些變動(dòng)下斷,然后反追上去,一般來說就能找到想要的信息。

那么符卡釋放后,會(huì)有什么變化呢?

比較典型的,一個(gè)是符卡的buff時(shí)間會(huì)增加,另一個(gè)是場(chǎng)面上總buff的個(gè)數(shù)會(huì)增加。

這里我選擇的切入點(diǎn)是buff總個(gè)數(shù),因?yàn)榉ǖ尼尫庞锌赡軙?huì)造成儲(chǔ)存buff時(shí)間的地址變動(dòng),所以不太好追。而buff個(gè)數(shù)是固定的地址,所以更加容易上手一些。

初始數(shù)量搜0-10,然后每增加1buff,搜+1,每減少搜-1,如此反復(fù),得到儲(chǔ)存buff數(shù)量的地址:15516C346E4

查找什么改寫了該地址,然后用黑谷釋放一次符卡,得到下圖:

追過去,下斷,然后重新用黑谷釋放符卡:

同時(shí)我們也得到了return?address:

那么接下來就是定位每一個(gè)上層函數(shù),查看函數(shù)名以及附近調(diào)用的函數(shù)。

GameAssembly.dll+12C46AF:

看不出來啥,繼續(xù)往上追。

GameAssembly.dll+A11F2B:

函數(shù)頭同樣看不出來東西,繼續(xù)往上追。

GameAssembly.dll+669B49:

這里開始有點(diǎn)意思了,繼續(xù)往上,看看上層函數(shù)叫啥。

GameAssembly.dll+66E09E:

這個(gè)從函數(shù)名來看,很明顯就是黑谷的符卡效果,即:關(guān)店時(shí)客人不會(huì)離開。那么必定是先觸發(fā)符卡,然后調(diào)用此函數(shù)。也就是說想要得到符卡信息還得往上走。

GameAssembly.dll+4CAF0D:

看這個(gè)函數(shù)名,有點(diǎn)像委托。

那么就去Assembly-CSharp.dll里搜一下"c__DisplayClass12_0 OnPositiveBuffExecute b__0",得到下圖:

如果我們把游戲切換成英文版,就會(huì)發(fā)現(xiàn)黑谷山女的英文名就叫Yamame。

換言之,這個(gè)Spell_Yamame,其實(shí)就是黑谷的符卡信息。

那么我們看一下Spell_Yamame究竟是個(gè)啥,以及包含了哪些屬性:

首先吧,既然是特效,那么它的類型就不可能是int,float,AudioClip。

排除這三個(gè)類型,那么只剩下GameObject類型的lightVFX,webVFX1,webVFX2。

再加上我想去除的特效是閃光棒,不是蜘蛛網(wǎng)。那基本上可以確定了,Spell_Yamame.lightVFX就是我想要去除的特效。

如何得到Spell_Yamame:

從Spell_Yamame的信息圖里,我們可以看到,Spell_Yamame繼承自SpellBase。

于是我在dnSpy里翻了N久的關(guān)鍵詞搜索,終于給我找到了個(gè)static類型的函數(shù):

可以看到,GameData.Core.Collections.NightSceneUtility.DataBaseNight.RefSpecialGuestSpell?這個(gè)函數(shù),只需要一個(gè)npc的id,然后就會(huì)返回該npc的SpellBase,把它強(qiáng)轉(zhuǎn)一下,不就是Spell_Yamame了么?

替換特效的邏輯:

首先,我嘗試的是直接去除特效,即:

但是很遺憾,一旦將特效設(shè)置為null,游戲雖然不會(huì)崩潰,但是黑谷會(huì)直接卡住不動(dòng),不吃飯也不點(diǎn)餐。

由于個(gè)人水平有限,我暫時(shí)沒追到為啥VFX為null時(shí)人物會(huì)直接卡住。但是我轉(zhuǎn)念一想,既然去除做不到,那就替換唄。

即:

于是那討人厭、閃瞎眼的閃光棒特效就不見了,取而代之的是相對(duì)不起眼的蜘蛛網(wǎng)特效。

我覺得自己實(shí)在是太聰明了?。。?/p>

接下來無非是去游戲里找個(gè)非常不起眼,幾乎等同于無的特效。最終我選擇的是阿求的特效。

以下是我用來替換一些我不想看到的特效的代碼:

但是!

這游戲好像不支持mod。

每次我使用BepInEx加載游戲到一半時(shí),直接報(bào)錯(cuò)"Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object."

如果有大佬可以指點(diǎn)下這個(gè)問題,那真的感激不盡。

那么回歸正題,既然mod?patch不了,那我就直接把C#轉(zhuǎn)成匯編,然后用線程調(diào)用匯編寫成的函數(shù)。畢竟這個(gè)函數(shù)本質(zhì)上來說很簡(jiǎn)單,唯一麻煩點(diǎn)的就是查下偏移。

以下是查找Spell_Yamame.lightVFX的例子。

打開CE里的Net?Info,Image選擇Assembly-CSharp.dll,class里搜索"Spell_Yamame",最后得出下圖:

由圖可知,lightVFX的偏移是0x28。

同理可以得知其他特效的偏移,最終通過CE,創(chuàng)建線程來執(zhí)行我們的替換函數(shù):


[CE][IL2CPP][東方夜雀食堂]替換符卡特效(拒絕光污染!)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
通许县| 集安市| 剑河县| 毕节市| 广西| 丹凤县| 湟中县| 娱乐| 平原县| 延庆县| 平谷区| 秦皇岛市| 图木舒克市| 马鞍山市| 上饶县| 丽水市| 汝南县| 平远县| 资溪县| 池州市| 宁武县| 子洲县| 东乌| 安宁市| 南涧| 潞西市| 易门县| 军事| 增城市| 襄垣县| 菏泽市| 峨边| 苍梧县| 金华市| 乐亭县| 衢州市| 来凤县| 于田县| 平乡县| 株洲县| 南京市|