tempa 发表于 2022-8-28 16:37

【盐和避难所】一些细微提升游戏体验的修改❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

本帖最后由 tempa 于 2022-9-5 13:37 编辑

最近重玩这个游戏,简单看了下源码,版里修改器不少就不发修改好的了,说说dnSpy里改的函数和位置,感兴趣的可以自己动手改改。


本贴只提供了直接修改方法,有经验的可以自己实现按需开关对应功能,比如去掉Bloom黑边,自己加个变量判断,实现原版画面和去黑边版画面一键切换,其他功能同理,只提供最简思路。


1.跳过开头Logo,加快菜单显示速度
2.击杀Boss后无全屏Vanquish Logo
3.Boss过场时间变快
4.占据圣所速度变快
5.玩家攻击速度变快
6.使用Buf道具速度变快
7.铁匠升级速度变快
8.存档时重置Boss
9.伤害数值弹起高度
10.禁止添加重名钥匙
11.去除Bloom黑边特效
12.手动刷新怪物
13.显示鼠标,设置窗口坐标
14.暂停游戏
================================================================================
1.跳过开头Logo,加快菜单显示速度

ProjectTower.gamestate.Loader

private static int loadScreen = 0;
改成
private static int loadScreen = 4;





ProjectTower.menu.MenuMgr.Init

this.transMode = 2;
改成
this.transMode = 0;





ProjectTower.menu.MenuMgr.Update

函数最开始加入
transFrame = 2;
================================================================================
2.击杀Boss后无全屏Vanquish Logo

ProjectTower.gamestate.GameStateManager.Vanquish

GameStateManager.vanquishedFrame = 2f;
改成
GameStateManager.vanquishedFrame = 0;
================================================================================
3.Boss过场时间变快

ProjectTower.gamestate.BossToast.Update

BossToast.frame -= Game1.frameTime * 0.615f;
改成
BossToast.frame -= Game1.frameTime * 3;
================================================================================
4.占据圣所速度变快

ProjectTower.character.CharAnim.Update

if (key < 0 || key >= animation.keyFrame.Length)
{
      key = 0;
}
这句下面写入
if (c.playerIdx > -1)
{
      if (animation.name == "icon" || animation.name == "candle" || animation.name == "shrine")
      {
                animation.keyFrame.duration = 1;
      }
}
================================================================================
5.攻击速度变快

和上面相同的位置

if (c.playerIdx > -1)
{
      if(GetAttackingAnim())
      {
                animation.keyFrame.duration = 1;
      }
      else if(animName.Contains("attack") || animName.Contains("strong"))
      {
                animation.keyFrame.duration = 1;
      }
}

如果2个都用的话,可以写到一起
if (c.playerIdx > -1)
{
      if (animation.name == "icon" || animation.name == "candle" || animation.name == "shrine")
      {
                animation.keyFrame.duration = 1;
      }

      if(GetAttackingAnim())
      {
                animation.keyFrame.duration = 1;
      }
      else if(animName.Contains("attack") || animName.Contains("strong"))
      {
                animation.keyFrame.duration = 1;
      }
}

================================================================================
6.使用Buf道具速度变快

和上面相同的位置

3个分别是
buff(祝福书页等),药水,裹布

if (c.playerIdx > -1)
{
      if (animation.name == "buff" || animation.name == "potion" || animation.name == "rub")
      {
                animation.keyFrame.duration = 1;
      }
}

如果3个都用的话,可以写到一起

if (c.playerIdx > -1)
{
      if (animation.name == "icon" || animation.name == "candle" || animation.name == "shrine")
      {
                animation.keyFrame.duration = 1;
      }

      if(GetAttackingAnim())
      {
                animation.keyFrame.duration = 1;
      }
      else if(animName.Contains("attack") || animName.Contains("strong"))
      {
                animation.keyFrame.duration = 1;
      }
      
      if (animation.name == "buff" || animation.name == "potion" || animation.name == "rub")
      {
                animation.keyFrame.duration = 1;
      }
}
================================================================================
7.铁匠升级速度变快

ProjectTower.player.PlayerDraw.InitUpgradeGlow


this.upgradeFrame = 6f;
改成
this.upgradeFrame = 1;
================================================================================
8.存档时重置Boss

ProjectTower.map.triggers.TriggerMgr.VanquishBoss

删除以下代码

PlayerMgr.SetMainPlayerFlag(arena.bossFlag);


注意,此修改需要在打过序章Boss无言深渊,上岸后存档,再修改,读档,否则会导致打完Boss重复剧情字幕问题
另外此修改似乎也影响NPC位置判断,只适合自娱自乐使用
================================================================================
9.伤害数值弹起高度

ProjectTower.particles.particles.hit.HitNumber.Init



p.traj = Rand.GetRandomVec2(-10f, 10f, -100f, -80f);
改成
p.traj = new Vector2(0, -1000);
================================================================================
10.禁止添加重名钥匙

ProjectTower.map.pickups.Pickup.AddToInv


if (p.pickup == null)
{
      p.pickupFrame = 3f;
      p.pickup = new List<Player.PlayerPickup>();
}
这句下面加入
bool bIgnorSameKey = false;
if (loot.name != null)
{
      if (loot.category == 6)
      {
                for (int j = 0; j < p.playerInv.inventory.Length; j++)
                {
                        if (p.playerInv.inventory != null && p.playerInv.inventory.category == 6 && p.playerInv.inventory.name != null)
                        {
                              if (p.playerInv.inventory.name == loot.name)
                              {
                                        bIgnorSameKey = true;
                                        break;
                              }
                        }

                }
      }
}
if (bIgnorSameKey)
{
      continue;
}


================================================================================
11.去除Bloom黑边特效

ProjectTower.game.GameDraw.DrawGame


BloomComponent.Draw(goalTarg, GameDraw.sceneTarg, GameDraw.lightTarg);
改成
BloomComponent.Draw(goalTarg, GameDraw.mainTarg, GameDraw.lightTarg);




ProjectTower.director.bloom.BloomComponent.Draw


parameters["BloomIntensity"].SetValue(BloomComponent.bloomIntensity);

这句上面加入

bloomIntensity = 0;
darkBlur = 0;

防止暴风城堡地面太亮过曝





原版图 对 修改后效果图

















================================================================================
12.手动刷新怪物

MapMgr.SanctuaryRefresh();


可以自己设个快捷键

if (GetKeyDown(Keys.OemTilde))
{
      MapMgr.SanctuaryRefresh();
}

配合 6.存档时重置Boss

可以刷 Boss Rush
================================================================================
13.显示鼠标,设置窗口坐标

ProjectTower.Game1.Initialize

函数末尾加入

IsMouseVisible = true;
System.Windows.Forms.Form form = (System.Windows.Forms.Form)System.Windows.Forms.Control.FromHandle(Window.Handle);
form.SetDesktopLocation(0, 0);
================================================================================
14.暂停游戏

紧急事件发生,接电话,上厕所等,不用傻傻的放弃游戏挨揍

ProjectTower.character.Character.Update

函数最开始写入

if (PauseGame)
{
      return;
}

自己写个控制键

if (GetKeyDown(Keys.P))
{
      PauseGame = !PauseGame;
}

liu_p 发表于 2022-11-30 18:37

完全不懂,怎么弄。。。

fang680098793 发表于 2022-12-17 11:42

谢谢分享

tempa 发表于 2023-2-8 20:56

居然有人回复啊,我以为没人看,贴子发很久都没人回过。

这是纯代码片断,需要有一定C#编程经验才能看懂,主要是给一些有修改或者Mod制作的人提供一个思路。

北冥愚 发表于 2023-5-2 20:55

虽然不太懂,但是谢谢你

ushauidhadsuifh 发表于 2023-11-26 13:09

有点意思

追风健 发表于 2023-11-29 23:58

ZXCBXCBZXCBZXCBDGVASDG

zerokin0011 发表于 2024-6-1 17:06

这个是要怎么用的嘛

chenhui191 发表于 2024-9-14 22:30

66666666666666666666

3dm_18785723 发表于 2024-11-3 19:14

老师,请问一下怎么添加新法术,或者修改原本法术
页: [1]
查看完整版本: 【盐和避难所】一些细微提升游戏体验的修改❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤