问下有没有核弹mod?????????

RTRTRTRTRTRTRTRT

要比原来强大很多的那种

自己动手,丰衣足食 :slight_smile:

到FA的目录找到

F:\Program Files\THQ\Gas Powered Games\Supreme Commander - Forged Alliance\gamedata\units.scd
用16进制编辑器打开会发现文件头有个"PK",原来是zip文件
于是可以用winrar打开它

在里面会发现大量的目录,每一个目录中保存的是一个单位的数据,其中游戏里的单位属性是在 .bp后缀的文件中保存的。
文件夹的命名都是类似于
XSS0202
其中的0202是有命名依据的,比如排在第二个位置的2,代表它是一个Tech 2科技的单位,所以可以根据这一个位置来定位。

核弹发射器的着一串数字是2305, :slight_smile:
在这个UBR2305_unit.bp中,保存了单位的所有属性,但我们不懂英语,也不可能会去查google翻译,我们只关心它的导弹的爆炸范围,
看了一会儿后,我们开始找Radius(半径)相关属性,

伤害的范围
Radius = 40,
最远射程
MaxRadius = 20000,
最近射程
MinRadius = 0,

核弹爆炸特有的内圈和外圈两个范围和伤害
NukeInnerRingDamage = 70000,
NukeInnerRingRadius = 30,
NukeInnerRingTicks = 24,
NukeInnerRingTotalTime = 0,
NukeOuterRingDamage = 500,
NukeOuterRingRadius = 40,
NukeOuterRingTicks = 20,
NukeOuterRingTotalTime = 0,

深藏不漏啊!

谢谢!!!如果我要改大爆炸效果呢,比如改大蘑菇云

试试看嘛 :slight_smile:

试了,爆炸效果没什么变化…

哈哈。那想解决问题,就跟着能解决问题的xpoy的样子做

我没有见过FA的mod也没有了解过FA的mod怎么做的,在单位的这个武器属性里面没有找到和爆炸效果相关的东西,所以我试试它表示出来的和核弹的弹药相关的另一个文件 ProjectileId = ‘/projectiles/SIFInainoStrategicMissile01/SIFInainoStrategicMissile01_proj.bp’,
因为FA的scd文件的组织形式我是了解的,所以这个projectiles是可能打包在另一个SCD目录里的,再在gamedata里找到projectiles.scd,打开它会发现想要的目录下面包括了,
SIFInainoStrategicMissile01_proj.bp
SIFInainoStrategicMissile01_script.lua

在这个.bp里面,对照economy中的造价,发现这原来是核弹头的属性,因为我比较的熟英语,所以发现在最上面的声音的属性里面,核弹爆炸是用’Impacts’(撞地)来表示的

    NukeExplosion = Sound {
   Bank = 'Impacts',
   Cue = 'XSB2305_Impact',
   LodCutoff = 'Weapon_LodCutoff',
   },

但是很不幸的是在这个属性文件里面没有发现和爆炸效果相关的东西。
那看看同一目录下的 .lua文件,lua是一种程序语言,所以可以确定是用来控制核弹头不同阶段的不同效果的,

幸运的是这儿的OnImpact函数中,可以很清楚的看到,会播放爆炸的声音,以及显示爆炸效果(nukeProjectile = self:CreateProjectile(…)在核弹头的位置制造一个效果)

   OnImpact = function(self, TargetType, TargetEntity)
   if not TargetEntity or not EntityCategoryContains(categories.PROJECTILE, TargetEntity) then
   # Play the explosion sound
   local myBlueprint = self:GetBlueprint()
   if myBlueprint.Audio.Explosion then
   self:PlaySound(myBlueprint.Audio.Explosion)
   end
   
   nukeProjectile = self:CreateProjectile('/effects/entities/InainoEffectController01/InainoEffectController01_proj.bp', 0, 0, 0, nil, nil, nil):SetCollision(false)
   nukeProjectile:PassDamageData(self.DamageData)
   nukeProjectile:PassData(self.Data)
   end
   SIFInainoStrategicMissile.OnImpact(self, TargetType, TargetEntity)
   end,

现在就很酷了,我们找到了爆炸效果的文件,
‘/effects/entities/InainoEffectController01/InainoEffectController01_proj.bp’
在effect.scd中,同一个目录的SIFInainoStrategicMissile01_script.lua中就包含了我们感兴趣的信息
经过观察,会发现这个类里面唯一一个没有和爆炸相关的特别含义的函数是PassData ,所以可以确定它是一个用来给FA中的其他地方调用的一个固定名字的接口,在其中要实现爆炸的效果,会发现只是依次调用了本类中的其他函数,

     self:ForkThread(self.InnerRingDamage)
   self:ForkThread(self.OuterRingDamage)
   
   local army = self:GetArmy()
   self:ForkThread(self.CreateInitialHit, army)
   self:ForkThread(self.CreateInitialBuildup, army)
		self:ForkThread(self.CreateGroundFingers )
		self:ForkThread(self.CreateInitialFingers )
   self:ForkThread(self.MainBlast, army)

而像震动屏幕,产生烟雾,爆炸的波浪,都是在这个lua文件中的唯一个类里的MainBlast(主爆炸)函数里完成的,
在MainBlast中的下边会发现有注释的一段

# Create explosion dust ring, 产生爆炸的灰烬环
   local vx, vy, vz = self:GetVelocity()
   local num_projectiles = 16        
   local horizontal_angle = (2*math.pi) / num_projectiles
   local angleInitial = RandomFloat( 0, horizontal_angle )  
   local xVec, zVec
   local offsetMultiple = 30.0
   local px, pz
   for i = 0, (num_projectiles -1) do            
   xVec = (math.sin(angleInitial + (i*horizontal_angle)))
   zVec = (math.cos(angleInitial + (i*horizontal_angle)))
   px = (offsetMultiple*xVec)
   pz = (offsetMultiple*zVec)
   
   local proj = self:CreateProjectile( SIFInainoStrategicMissileEffect03, px, 1, pz, xVec, 0, zVec )
   proj:SetLifetime(12.0)
   proj:SetVelocity(10.0)
   proj:SetAcceleration(-0.35)            
   end

会发现是根据其中的offsetMultiple 的值来设置随机创建出来的灰尘可能散布到的范围的,这个数字是一个小数 :)。
到这儿我想你已经修改好了。没吗?唔,事实上看到这么多字就不看了的。可是,我很懒的,那样的话,你就需要等等看看有没有其他人来帮下忙

辛苦了,我再试试

xpoy真懒
:6_284: