下面TA-EXCESS II alpha1e版的CORE的T1激光坦克的脚本,估计每个版本的都一样,如果你的版本不一样也可以对照看看
下面是脚本的注释:
#define TA
#include “sfxtype.h”
#include “exptype.h”
piece base, hull, lplate, rplate, ltrack, lshadow, rtrack, rshadow, turret, pitchturret, barrel, flare1, flare2, fire;
static-var DamageNow, LastDamage; //设置两个静态变量DamageNow和LastDamage,后面用
SmokeUnit(HealthPercent, SleepTime) //冒烟脚本,不解析了
{
signal 8;
set-signal-mask 8;
while( get BUILD_PERCENT_LEFT )
{
sleep 500;
}
while( TRUE )
{
HealthPercent = get HEALTH;
if( HealthPercent < 60 )
{
emit-sfx 256 | 1 from pitchturret;
SleepTime = 300;
}
if( HealthPercent < 30 )
{
emit-sfx 256 | 2 from lplate;
emit-sfx 256 | 1 from rplate;
SleepTime = 200;
}
sleep SleepTime;
}
}
HitByWeapon(AngleX, AngleZ) //被武器打中的脚本
{
DamageNow = get HEALTH; //令变量DamageNow=当前生命的百分比
if( DamageNow <= LastDamage - 10 ) //如果变量DamageNow<=LastDamage - 10
{
signal 128;
set-signal-mask 128;
LastDamage = DamageNow; //
turn base to z-axis AngleZ speed <105.000000>; //以105的速度沿水平方向Z轴转动base部件到AngleZ这个角度
turn base to x-axis AngleX speed <105.000000>; //同上,X轴方向
wait-for-turn base around z-axis;
wait-for-turn base around x-axis;
turn base to z-axis <0.000000> speed <30.000000>; //以30的速度转回到原位
turn base to x-axis <0.000000> speed <30.000000>;
return (0);
}
LastDamage = DamageNow; //懂C语言的话就明白的
}
//上面这个脚本是单位被击中时摇晃一下的脚本,开头时设置两个静态变量DamageNow和LastDamage
//AngleX, AngleZ,是"anglex" 和 “anglez” 是被击中部位的 X 和 Z 坐标 。不用管。
RockUnit(AngleX, AngleZ) //小脚本,摇晃单位,
{
turn base to x-axis AngleX speed <25.000000>;
turn base to z-axis AngleZ speed <25.000000>;
wait-for-turn base around z-axis;
wait-for-turn base around x-axis;
turn base to z-axis <0.000000> speed <10.000000>;
turn base to x-axis <0.000000> speed <10.000000>;
}
//上面这个脚本是单位攻击别人,时摇晃一下的脚本,根据攻击攻击的方向往反方向摇晃一下,模拟后坐力
Create() //出生状态脚本,不详细解析了
{
DamageNow = 100;
LastDamage = 100;
hide flare1;
hide flare2; //把炮口的火光1和火光2隐藏起来
dont-cache flare1; //不阻止火光1和2的动态贴图的播放
dont-cache flare2;
spin flare1 around z-axis speed <200.00>; //旋转火光1和2
spin flare2 around z-axis speed <-210.00>;
start-script SmokeUnit();
}
//对火光1和2的描述比较多,普通的单位一个炮管只有一个火光(一般什么特殊效果都没有,就是开炮时出现一下),TA-EXCESS II的有内外两层火光还带动态贴图,还要旋转。
StartMoving() //开始移动的脚本
{
dont-cache ltrack; //不阻止左边履带的动态贴图的播放
dont-cache rtrack; //右边履带
}
///在部件ltrack和ltrack上贴履带的动态贴图,在移动时播放,使看起来履带有动
StopMoving() //停止移动的脚本
{
cache ltrack; //阻止左边履带的动态贴图的播放
cache rtrack; //右边履带
}
//停止移动就阻止动态贴图播放,这样履带就像不动了。如果你的单位没这些效果,例如TA的那些古老的原始的坦克,就删去这两段脚本吧。
RestoreAfterDelay() //返回初始的状态的脚本
{
sleep 4000; //延迟4000毫秒,就是不攻击之后4秒
turn turret to y-axis <0.000000> speed <90.000000>; //炮台以90的速度转动回到原位0
turn pitchturret to x-axis <0.000000> speed <30.000000>; //子炮台也回归原位,
start-script SmokeUnit();//Smoke script seems to disappear sometimes. This should fix the issue.
}
//就是让炮台炮管不攻击一段时间后,回归原位的脚本。炮台水平转回原位,子炮台(一般是炮管)上下方向转到原位
SweetSpot(PieceNum) //“甜点”,其实是指这个单位的整体参考位置,维修,被别人打都是对准这个位置
{
PieceNum = turret; //指定部件是炮台,会以炮台的原点为“甜点”
}
QueryPrimary(PieceNum) //第一武器参考点
{
PieceNum = fire; //炮口火光位置上的一个无模型的部件,TA可以建这种无模型部件,一般是用来做冒烟冒泡的原点,这里是用来做炮弹的出发点。
}
AimFromPrimary(PieceNum) //这个脚本是要以子炮台作为瞄准的部件
{
PieceNum = pitchturret; //部件是子炮台
}
AimPrimary(Heading, Pitch) //炮台瞄准的脚本
{
signal 2;
set-signal-mask 2;
turn turret to y-axis Heading speed <180.00>; //炮台水平转动到目标,这个<180.00>就是炮台的转速
turn pitchturret to x-axis <0.00> - Pitch speed <60.00>; //炮管上下转动到目标,
wait-for-turn turret around y-axis;
wait-for-turn pitchturret around x-axis;
start-script RestoreAfterDelay(); //调用上面的小脚本让炮台炮管不攻击时返回原位
return (1);
}
//瞄准的方式是炮台水平对准目标,炮管上下对准目标,这样就能对准目标了,这里最重要的就是炮台的转动速度,瞄得快才能早开炮,其他没什么好改的了。炮管的上下瞄准也有一点重要。
FirePrimary() //开火的脚本
{
move flare1 to z-axis [0.00] now;
move flare2 to z-axis [0.00] now;
move barrel to z-axis [-1.00] speed [10.00]; //炮管向后,这是模拟炮管后坐力
move flare1 to z-axis [-0.50] speed [5.00];
move flare2 to z-axis [-0.50] speed [5.00]; //flare的这4句一般的脚本是没有的,让炮口火光多点动态而已
show flare1; //这是重点,显示一下炮口的火光,不过没什么好改的
show flare2;
sleep 150; // 延迟150毫秒,就是让炮口火光显示0.15秒
hide flare1; //隐藏炮口火光1
hide flare2;
move barrel to z-axis [0.00] speed [3.00]; //移动炮管到原位
}
//开火要做的事一般只有两件,模拟一下炮管后坐力,显示一下炮口火光。模拟后座力就是炮管迅速向后(z轴负数)运动,再慢速回到原位(z轴原点0),炮口火光就是显示,然后延迟一下,再隐藏。
Killed(Severity, CorpseType) //死亡,不详细解析了
{
hide flare1; //炮口火光是开火时才有的,所以特别在死时也要隐藏一下,避免出现
hide flare2;
if( Severity <= 50 )
{
CorpseType = 1;
explode ltrack type BITMAPONLY | BITMAP3; //炸飞左履带
explode rtrack type BITMAPONLY | BITMAP3; //炸飞右履带
explode lplate type BITMAPONLY | BITMAP1; //炸飞左履带上边的保护板
explode rplate type BITMAPONLY | BITMAP1; //炸飞右履带上边的保护板
explode turret type BITMAPONLY | BITMAP5; //炸飞炮台
explode pitchturret type SHATTER | BITMAP5; //炸飞子炮台
return (0);
}
CorpseType = 2;
explode ltrack type BITMAPONLY | BITMAP3;
explode rtrack type BITMAPONLY | BITMAP3;
explode lplate type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode rplate type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode turret type BITMAPONLY | BITMAP5;
explode hull type SHATTER | BITMAP5;
explode barrel type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode pitchturret type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
}
一个单炮台单炮管的坦克的脚本就是这么简单,最重要的也就是瞄准和开火。被打中和开火摇晃单位之类没什么改的必要。履带运动之类看你需要了,不要就删除。通常我们会改的也只有一个地方,就是炮台的旋转速度。
一个多炮台多炮管的单位就麻烦一点,不过改起来倒是没什么难度。
CoreT1LasTank.rar (3.2 KB)