[General Purpose] New trajectory system
Projectile trajectories
- Projectiles can now have customizable trajectories.
抛射体现在可以有自定义的轨迹。
Trajectoryshould not be combined with original game's projectile trajectory logics (Arcing,ROT,VerticalorInviso). Attempt to do so will result in the other logics being disabled and a warning being written to log file.Trajectory不应与原游戏的抛射体逻辑(Arcing、ROT、Vertical或Inviso)结合使用。尝试这样做将导致其他逻辑被禁用并在日志文件中写入一条警告。Trajectory.Speeddefines the speed of the projectile, which unlikeSpeedused byROT> 0 projectiles is defined on projectile not weapon.Trajectory.Speed定义抛射体速度,与ROT> 0 抛射体不同的是Trajectory.Speed定义在抛射体上而不是武器上。- In
Trajectory=Straight, it refers to the whole distance speed of the projectile.在
Trajectory=Straight中,它指抛射体的全程速度。 - In
Trajectory=Bombard, it refers to the initial speed of the projectile.在
Trajectory=Bombard中,它指抛射体的初始速度。 - In
Trajectory=Missile, it refers to the final speed of the projectile.Trajectory.Speedwill be fixed at 192 by settingTrajectory.Missile.UniqueCurve=true.在
Trajectory=Missile中,它指抛射体的最终速度。若设置了Trajectory.Missile.UniqueCurve=true,则Trajectory.Speed固定为 192 。 - In
Trajectory=Engrave, it refers to the horizontal engrave speed of the projectile and it cannot exceed 128. Recommend set as about 40.在
Trajectory=Engrave中,它指抛射体的水平刻线速度,且不能超过 128 。建议设置为 40 左右。 - In
Trajectory=Parabola, it refers to the horizontal velocity of the projectile and is only used for modesSpeed,SpeedAndHeight, orSpeedAndAngle.在
Trajectory=Parabola中,它指抛射体的水平速度,且仅适用于Speed、SpeedAndHeight或SpeedAndAngle模式。 - In
Trajectory=Tracing, it refers to the moving speed of the projectile.在
Trajectory=Tracing中,它指抛射体的移动速度。
- In
Trajectory.Durationcontrols the duration the projectile can exist, and at the end of the time, the projectile will detonate. If it is a non positive number, there will be no timing. The following are exceptions.Trajectory.Duration控制抛射体的存在时限,超时后会引爆。非正值表示无时限。以下为特例。- In
Trajectory=Engrave, if it is a non positive number, automatically useTrajectory.Engrave.SourceCoordandTrajectory.Engrave.TargetCoordto calculate the process duration. At this point,Trajectory.Engrave.TargetCoordcan be regarded as the endpoint coordinates of the cutting line segment.在
Trajectory=Engrave中,如果它为非正数,则会自动根据Trajectory.Engrave.SourceCoord与Trajectory.Engrave.TargetCoord计算时长。在这种情况下,Trajectory.Engrave.TargetCoord可被视作是切割线段的终点坐标。 - In
Trajectory=Tracing, if set to zero, use weapon'sROF-10 as the duration. At least 1 frame. If it is negative, do not time it.在
Trajectory=Tracing中,如果它被设置为 0 ,则会用武器的ROF- 10 作为时长,至少1帧。如果是负数则不计时。
- In
Trajectory.TolerantTimecontrols how long the projectile will detonate after losing the target. If it is 0, it will detonate directly when switching targets.Trajectory.TolerantTime控制丢失目标后抛射体的爆炸延迟。如果设置为 0 ,则会在更换目标时立刻爆炸。Trajectory.CreateCapacitycontrols the capacity that this type of trajectory projectile can be fired. When it is set to a non negative number, the trajectory projectile can only be fired when number of this trajectory type fired by the firer on the map is less than this value, namely effective.Trajectory.CreateCapacity控制能发射的同类型轨迹抛射体的最大数量。当它设置为非负数时,只有当发射者在地图上发射的这种轨迹抛射体类型的数量小于该值时,才能发射这种轨迹抛射体,即生效。Trajectory.BulletROTcontrols the rotational speed of the projectile's orientation (facing direction). When it is 0, it will always face the direction defined byTrajectory.BulletFacing. Otherwise, it will rotate towards the direction defined byTrajectory.BulletFacingaccording to this speed.Trajectory.BulletROT控制抛射体朝向(面朝方向)的旋转速度。当其为 0 时,会一直朝向Trajectory.BulletFacing所定义的方向。否则,它将根据此速度朝向Trajectory.BulletFacing定义的目标旋转。Trajectory.BulletFacingcontrols what direction the projectile should face. This has the following 7 modes.Trajectory.BulletFacing控制抛射体应该朝向哪个方向。它有如下 7 种模式:- Velocity - Towards the direction of motion of the projectile. If
Trajectory.BulletROTis negative, it will only rotate on the horizontal plane.Velocity - 朝向抛射体运动的方向。如果
Trajectory.BulletROT为负数,则会只在水平面上旋转。 - Spin - Continuously rotating itself on a horizontal plane. The positive and negative of
Trajectory.BulletROTcan control the direction.Spin - 在水平面上持续自转。
Trajectory.BulletROT的正负能控制自转的方向。 - Stable - Static after launch and no longer rotates towards the direction. If
Trajectory.BulletROTis negative, only the direction on the horizontal plane exists.Stable - 发射后固定方向不再旋转。如果
Trajectory.BulletROT为负数,则只保留水平面上的朝向。 - Target - Towards the direction of the projectile target unit. If
Trajectory.BulletROTis negative, it will only rotate on the horizontal plane.Target - 朝向抛射体的目标单位。如果
Trajectory.BulletROT为负数,则会只在水平面上旋转。 - Destination - Towards the direction of the projectile destination. If
Trajectory.BulletROTis negative, it will only rotate on the horizontal plane.Target - 朝向抛射体的目的地。如果
Trajectory.BulletROT为负数,则会只在水平面上旋转。 - FirerBody - Follow the orientation of the firer's body, and remain still after the launcher is killed. Only rotates on a horizontal plane.
FirerBody - 跟随发射者的身体朝向,并在发射者被摧毁后保持。只会在水平面上旋转。
- FirerTurret - Follow the orientation of the firer's turret, and remain still after the launcher is killed. Only rotates on a horizontal plane.
FirerTurret - 跟随发射者的炮塔朝向,并在发射者被摧毁后保持。只会在水平面上旋转。
- Velocity - Towards the direction of motion of the projectile. If
Trajectory.RetargetRadiuscontrols the radius of the projectile to search for a new target after losing its original target. The projectile will search for new target at the original target's location. The following have exceptions.Trajectory.RetargetRadius控制抛射体在丢失原目标后搜索新目标的范围的半径。抛射体将在原本目标位置搜索新目标。以下有特例。- In
Trajectory=Missile, if the projectile hasn't arrivedTrajectory.Missile.PreAimCoordyet, the last coordinate of the original target is taken as the center of the searching circle. Otherwise, the coordinate of the distance in front of the projectile is taken as the center of the circle. Set to 0 indicates that this function is not enabled, and it will still attempt to attack the original target's location. If it is set to a negative value, it will self explode in place when it starts searching.在
Trajectory=Missile中,若抛射体还未到达过Trajectory.Missile.PreAimCoord,原本目标最后所在的坐标将被用作搜索范围的中心。否则,会将抛射体前方这个距离的坐标用作搜索范围的中心。设置为 0 时代表功能不启用,抛射体仍将尝试攻击原目标的位置。如果设置为负值,则会在开始索敌时原地自爆。 - In
Trajectory=Tracing, the projectile will search for new target at the current position of itself.在
Trajectory=Tracing中,抛射体将在抛射体自己的位置搜索新目标。 Trajectory.RetargetIntervalcontrols the interval between each search for a new target again.Trajectory.RetargetInterval控制每次再次搜索新目标的间隔。Trajectory.RetargetHousescontrols the projectile can find new target from which houses.Trajectory.RetargetHouses控制抛射体能从哪些所属方寻找到新目标。
- In
Trajectory.Synchronizecontrols whether the target of the projectile is synchronized with the target of its firer. If not, the projectile will not update the target.Trajectory.Synchronize控制抛射体的目标是否同步发射者的目标,如果不同步,抛射体不会直接更新目标。Trajectory.PeacefulVanishcontrols whether the projectile disappears directly when it is about to detonate, without producing animation or causing damage. The default value isTrajectory=EngraveorTrajectory.ProximityImpactnot equal to 0 orTrajectory.DisperseCyclenot equal to 0.Trajectory.PeacefulVanish控制抛射体在最后要引爆时是否直接消失,不生成动画和造成伤害。默认值为Trajectory=Engrave或Trajectory.ProximityImpact不等于 0 或Trajectory.DisperseCycle不等于 0 。Trajectory.ApplyRangeModifierscontrols whether any applicable weapon range modifiers from the firer are applied to the projectile. Effective options includeTrajectory.Duration,Trajectory.DetonationDistanceandTrajectory.EdgeAttenuation.Trajectory.ApplyRangeModifiers控制是否将任何适用的武器射程修改应用于抛射体。有效的包括Trajectory.Duration、Trajectory.DetonationDistance和Trajectory.EdgeAttenuation。Trajectory.UseDisperseCoordcontrols whether the fire position need to replaced with the FLH of its superior's trajectory, which setTrajectory.RecordSourceCoordto true. Only takes effect when it is fired from one of theTrajectory.DisperseWeapons.Trajectory.UseDisperseCoord控制是否使用它的设置了Trajectory.RecordSourceCoord的上级轨迹抛射体的 FLH 替换发射位置。仅当它自身是从Trajectory.DisperseWeapons中发射时生效.Trajectory.RecordSourceCoordcontrols whether the projectile needs to record the launch position, which will be used for the appropriate weapons inTrajectory.DisperseWeapons. It can be nested and inherited, which need subordinates to enableTrajectory.UseDisperseCoord. The default value isTrajectory=Engraveor have setTrajectory.DisperseWeapons.Trajectory.RecordSourceCoord控制抛射体是否需要记录发射位置,用于Trajectory.DisperseWeapons中合适的武器。可以嵌套继承,成功继承需要下级拥有Trajectory.UseDisperseCoord。默认值为Trajectory=Engrave或设置了Trajectory.DisperseWeapons。- In
Trajectory=Engrave, it will also be used as a starting point for laser drawing.在
Trajectory=Engrave中,它将同样被用作激光绘制的起点。
- In
Trajectory.OffsetCoordcontrols the offsets of the target. Projectile will aim at the relative coordinates of the target to attack. It also supportsInaccurateandTrajectory.LeadTimeCalculateon this basis.Trajectory.OffsetCoord控制目标位置的额外偏移,抛射体将会瞄准目标的这个相对坐标进行攻击。它也支持在此基础上使用Inaccurate和Trajectory.LeadTimeCalculate。- In
Trajectory=EngraveorTrajectory=Tracing, these are invalid.在
Trajectory=Engrave或Trajectory=Tracing中,这些是无效的。 Trajectory.RotateCoordcontrols whether to rotate the projectile's firing direction within the angle bisector ofTrajectory.OffsetCoord(orTrajectory.Missile.PreAimCoordinTrajectory=Missile) according to the most superior's weapon'sBurst. Set to 0 to disable this function. Negative values will reverse the direction of rotation.Trajectory.RotateCoord控制是否按照武器的Burst在以Trajectory.OffsetCoord(或Trajectory=Missile中的Trajectory.Missile.PreAimCoord)为角平分线的角度内旋转抛射体发射方向,为 0 代表不启用该逻辑。负值会反转旋转方向。Trajectory.MirrorCoordcontrols whetherTrajectory.OffsetCoord(andTrajectory.Missile.PreAimCoordinTrajectory=Missile) need to automatically mirror the lateral value to adapt to the firer's current burst index. At the same time as mirroring, the rotation direction calculated byTrajectory.RotateCoordwill also be reversed, and the rotation angle between each adjacent projectile on each side will not change as a result.Trajectory.MirrorCoord控制是否需要自动镜像Trajectory.OffsetCoord(和Trajectory=Missile中的Trajectory.Missile.PreAimCoord)中的横向坐标以适应发射者当前的爆发计数。镜像的同时Trajectory.RotateCoord计算的旋转方向也会反转,每侧相邻抛射体间的旋转角度不变。Trajectory.AxisOfRotationcontrols the rotation axis when calculatingTrajectory.RotateCoord. The axis will rotates with the unit orientation or the vector that from target position to the source position. The length is not important, but the direction is important (the opposite vector will also reverse the rotation direction).Trajectory.AxisOfRotation控制计算Trajectory.RotateCoord时的旋转轴,旋转轴会随单位朝向或目标位置到发射位置的向量旋转。长度不重要,但方向很重要(相反的向量也会反转旋转方向)。
- In
Trajectory.LeadTimeCalculatecontrols whether the projectile need to calculate the lead time of the target when firing.Trajectory.LeadTimeCalculate控制抛射体在开火时是否计算目标的提前量。Trajectory.LeadTimeMaximumcontrols the projectile to predict how long the target will continue to move (used to prevent the projectile from flying too far).Trajectory.LeadTimeMaximum控制抛射体最多能够预测目标还会继续运动多久(用于让抛射体不会飞得太远)。
Trajectory.DetonationDistancecontrols the maximum distance in cells from intended target at which the projectile will be forced to detonate. Set to 0 to disable forced detonation. The following are exceptions.Trajectory.DetonationDistance控制抛射体距离预期目标多少格内会强制引爆。设置为 0 可禁用强制引爆。以下为特例。- In
Trajectory=Straight, ifTrajectory.ApplyRangeModifiersis set to true, any applicable weapon range modifiers from the firer are applied here as well. By settingTrajectory.Straight.PassThrough=true, it refers to the distance that projectile should travel from its firer when it above 0, and the distance that projectile should move behind the target when it below 0 (use the absolute value), and keep moving without distance restrictions when it is zero.在
Trajectory=Straight中,如果启用了Trajectory.ApplyRangeModifiers,发射者任何适用的武器射程修改也会在此处应用。通过设置Trajectory.Straight.PassThrough=true,此值代表了其为正时抛射体会从发射者位置行进这么长的距离,为负时抛射体会行进到目标身后这么长的距离(使用绝对值),为零时无距离限制地保持行进。 - In
Trajectory=BombardandTrajectory=Parabola, when it is set to a negative value, if the target is movable, it will change its target to the cell where the target is located (This is a function expanded forTrajectory.DisperseWeaponsandAirburstWeapon).在
Trajectory=Bombard和Trajectory=Parabola中,当设置为负数时,若目标是可移动的,它将会把目标更改为目标所在的单元格(这是一个为Trajectory.DisperseWeapons和AirburstWeapon扩展的功能)。
- In
Trajectory.TargetSnapDistancecontrols the maximum distance in cells from intended target the projectile can be at moment of detonation to make the projectile 'snap' on the intended target. Set to 0 to disable snapping.Trajectory.TargetSnapDistance控制抛射体距离预期目标多少格内时,抛射体能 “啪” 的一下吸附到目标身上。设为 0 将禁用吸附。Trajectory.DetonationHeightcontrols when the projectile is in a descending state and below the height of the launch position plus this value, it will detonate prematurely. Taking effect when it is set to non negative value. IfTrajectory.EarlyDetonationis set to true, it'll take effect during the ascending stage instead, which makes it detonate when its height is above the launch position plus this value.Trajectory.DetonationHeight控制当抛射体处于下落阶段且低于发射位置的高度加上此值时会提前引爆。设置为非负数时生效。如果启用了Trajectory.EarlyDetonation,它将在上升阶段且高度高于发射位置的高度加上此值时被提前引爆。- Only in
Trajectory=BombardorTrajectory=Parabola, these are valid.只有在
Trajectory=Bombard和Trajectory=Parabola中,这些会生效。
- Only in
Trajectory.AllowFirerTurningcontrols whether the projectile allow for significant changes in the orientation of the firer, otherwise it will be immediately detonated.Trajectory.AllowFirerTurning控制抛射体在发射后是否允许发射者的朝向大幅度变动,否则将被立刻引爆。
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory= ; Trajectory type enumeration (Straight|Bombard|Missile|Engrave|Parabola|Tracing)
Trajectory.Speed=100.0 ; floating point value
Trajectory.Duration=0 ; integer
Trajectory.TolerantTime=-1 ; integer
Trajectory.CreateCapacity=-1 ; integer
Trajectory.BulletROT=0 ; integer
Trajectory.BulletFacing=velocity ; Bullet facing enumeration (Velocity|Spin|Stable|Target|Destination|FirerBody|FirerTurret)
Trajectory.RetargetRadius=0 ; floating point value
Trajectory.RetargetInterval=1 ; integer
Trajectory.RetargetHouses=enemies ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
Trajectory.Synchronize=false ; boolean
Trajectory.PeacefulVanish= ; boolean
Trajectory.ApplyRangeModifiers=false ; boolean
Trajectory.UseDisperseCoord=false ; boolean
Trajectory.RecordSourceCoord= ; boolean
Trajectory.OffsetCoord=0,0,0 ; integer - Forward,Lateral,Height
Trajectory.RotateCoord=0 ; floating point value
Trajectory.MirrorCoord=true ; boolean
Trajectory.AxisOfRotation=0,0,1 ; integer - Forward,Lateral,Height
Trajectory.LeadTimeCalculate=false ; boolean
Trajectory.LeadTimeMaximum=0 ; integer, game frames
Trajectory.DetonationDistance=0.4 ; floating point value
Trajectory.TargetSnapDistance=0.5 ; floating point value
Trajectory.EarlyDetonation=false ; boolean
Trajectory.DetonationHeight=-1 ; integer
Trajectory.AllowFirerTurning=true ; boolean
- Make sure you set a low
Trajectory.RetargetRadiusvalue unless necessary.除非必要,否则请确保你设置了一个较低的
Trajectory.RetargetRadius值。 Trajectory.LeadTimeCalculatewill not affect the facing of the turret.Trajectory.LeadTimeCalculate不会影响炮塔的朝向。
Trajectory.LeadTimeCalculateperforms best when the projectile speed is 2 to 3 times the target speed.Trajectory.LeadTimeCalculate在抛射体的速度是目标的速度的二至三倍时表现最佳。
- It also has linkage functions with
Inaccurate,BallisticScatter.Min,BallisticScatter.Max,Gravity,SubjectToGround.它也具有与
Inaccurate、BallisticScatter.Min、BallisticScatter.Max、Gravity、SubjectToGround联动的功能。 - The following table will briefly display the support of various types for various general functions. (⚪ - effective / · - invalid)
下表将简要显示各种类型对各种一般功能的支持。 (⚪ - 有效 / · - 无效)
| Key | Straight |
Bombard |
Missile |
Engrave |
Parabola |
Tracing |
|---|---|---|---|---|---|---|
Inaccurate |
⚪ | ⚪ | ⚪ | · | ⚪ | · |
BallisticScatter |
⚪ | ⚪ | ⚪ | · | ⚪ | · |
Gravity |
· | ⚪ | ⚪ | · | ⚪ | · |
SubjectToGround |
⚪ | ⚪ | · | · | · | · |
ProjectileRange(Weapon's) |
⚪ | ⚪ | ⚪ | · | ⚪ | · |
Trajectory.Speed |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.Duration |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.TolerantTime |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.CreateCapacity |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.BulletROT |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.BulletFacing |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.RetargetRadius |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.Synchronize |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.PeacefulVanish |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.ApplyRangeModifiers |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.UseDisperseCoord |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.RecordSourceCoord |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.OffsetCoord |
⚪ | ⚪ | ⚪ | · | ⚪ | · |
Trajectory.RotateCoord |
⚪ | ⚪ | ⚪ | · | ⚪ | · |
Trajectory.MirrorCoord |
⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ |
Trajectory.AxisOfRotation |
⚪ | ⚪ | ⚪ | · | ⚪ | · |
Trajectory.LeadTimeCalculate |
⚪ | ⚪ | ⚪ | · | ⚪ | · |
Trajectory.LeadTimeMaximum |
⚪ | ⚪ | · | · | ⚪ | · |
Trajectory.DetonationDistance |
⚪ | ⚪ | ⚪ | · | ⚪ | · |
Trajectory.TargetSnapDistance |
⚪ | ⚪ | ⚪ | · | ⚪ | · |
Trajectory.EarlyDetonation |
· | ⚪ | · | · | ⚪ | · |
Trajectory.DetonationHeight |
· | ⚪ | · | · | ⚪ | · |
Trajectory.AllowFirerTurning |
· | · | · | ⚪ | · | ⚪ |
SubjectToGroundcan cause the projectile withTrajectory=Straightduring the entire process or the projectile withTrajectory=Bombardduring the ascent phase to detonate prematurely due to impact with the ground.SubjectToGround能够使得Trajectory=Straight的抛体在全程中或Trajectory=Bombard的抛体在上升阶段中,因撞击到地面而提前引爆- Setting
Trajectory.Missile.UniqueCurvewill ignore all of these settings.使用
Trajectory.Missile.UniqueCurve将忽略所有这些设置。
- In addition, these types of projectile also have some general functions for detonating warheads. Effective for all types.
此外,这些类型的抛射体还具有一些引爆弹头的通用功能。对所有类型都有效。
Trajectory.PassDetonateenables extra detonations when the projectile is traveling. (You can use this when you want the projectile to detonate warheads every other distance/time during the flight.)Trajectory.PassDetonate启用抛射体在飞行过程中的额外爆炸。(如果你希望抛射体在飞行过程中每隔一定距离/时间引爆一次那么可以使用此功能。)Trajectory.PassDetonateWarheaddefines the warhead detonated byTrajectory.PassDetonate. If not set, use the original warhead of the projectile.Trajectory.PassDetonateWarhead定义了Trajectory.PassDetonate引爆的弹头。如果未设置,则使用抛射体自身原本的弹头。Trajectory.PassDetonateDamagedefines the damage caused byTrajectory.PassDetonateWarhead. If not set, use the original damage of the projectile.Trajectory.PassDetonateDamage定义了Trajectory.PassDetonateWarhead造成的伤害。如果未设置,则使用抛射体自身原本的伤害。Trajectory.PassDetonateDelaycontrols the delay for detonating the warhead defined byTrajectory.PassDetonateWarhead.Trajectory.PassDetonateDelay控制Trajectory.PassDetonateWarhead所定义弹头的引爆间隔。Trajectory.PassDetonateInitialDelaycontrols the initial delay for detonating the warhead defined byTrajectory.PassDetonateWarhead.Trajectory.PassDetonateInitialDelay控制Trajectory.PassDetonateWarhead所定义弹头的初始引爆延迟。Trajectory.PassDetonateLocalcontrols whetherTrajectory.PassDetonateWarheadand weapon'sWarheadare always detonate at ground level.Trajectory.PassDetonateLocal控制Trajectory.PassDetonateWarhead和武器Warhead是否始终在地面高度引爆。
Trajectory.ProximityImpactcontrols the initial proximity fuse times. When there are enough remaining times and the projectile approaches another valid target, it will detonate a warhead defined byTrajectory.ProximityWarheadon it. If the times is about to run out, it will also detonate itself at its location. This function can be cancelled by setting to 0. A negative integer means unlimited times. By the way, you can use the weapon'sWarheadwith lowVersusonly to aim at the target, and use theTrajectory.ProximityWarheadto causing actual harm. (You can use this to cause non repeated damage to all units encountered during the flight of the projectile.)Trajectory.ProximityImpact控制初始的近炸引信次数。当剩余次数足够且抛射体靠近另一个有效目标时它将引爆由Trajectory.ProximityWarhead定义的弹头,如果剩余次数即将用完它将在当前位置引爆。此功能可以通过设为 0 禁用。负值整数表示无限次数。顺带一提,你可以使用带有低Versus的武器Warhead以瞄准目标,使用Trajectory.ProximityWarhead造成实际伤害。(你可以使用此功能在抛射体飞行期间对遇到的所有单位造成非重复伤害。)Trajectory.ProximityWarheaddefines the warhead detonated byTrajectory.ProximityImpact. If not set, use the original warhead of the projectile.Trajectory.ProximityWarhead定义了Trajectory.ProximityImpact引爆的弹头。如果未设置,则使用抛射体自身原本的弹头。Trajectory.ProximityDamagedefines the damage caused byTrajectory.ProximityWarhead. If not set, use the original damage of the projectile.Trajectory.ProximityDamage定义了Trajectory.ProximityWarhead造成的伤害。如果未设置,则使用抛射体自身原本的伤害。Trajectory.ProximityRadiuscontrols the range of proximity fuse. It can NOT be set as a negative value.Trajectory.ProximityRadius控制近炸引信的范围。不支持负数。Trajectory.ProximityDirectcontrols whether let the target receive damage instead of detonating the warhead.Trajectory.ProximityDirect控制是否直接伤害目标而不是引爆弹头。Trajectory.ProximityMedialcontrols whether to detonateTrajectory.ProximityWarheadat the bullet's location rather than the proximity target's location. IfTrajectory.ProximityDirectis set to true, this will only affect the calculation result ofTrajectory.DamageEdgeAttenuation.Trajectory.ProximityMedial控制是否在抛射体位置而不是近炸目标位置引爆Trajectory.ProximityWarhead。如果启用Trajectory.ProximityDirect,这只会影响Trajectory.DamageEdgeAttenuation的计算结果。Trajectory.ProximityAlliescontrols whether allies will also trigger the proximity fuse.Trajectory.ProximityAllies控制友军是否也会触发近炸引信。Trajectory.ProximityFlightcontrols whether to count units in the air.Trajectory.ProximityFlight控制是否考虑空中的单位。
Trajectory.ThroughVehiclescontrols whether the projectile will not be obstructed by vehicles or aircrafts on the ground. When it is obstructed, it will be directly detonated at its location. If it still haveTrajectory.ProximityImpacttimes, it will also detonate aTrajectory.ProximityWarheadat the location of the obstacle. Before the projectile being blocked,Trajectory.ProximityImpactwill also not cause damage to vehicles or aircrafts.Trajectory.ThroughVehicles控制抛射体是否不会被地面上的载具或战机阻挡。当它被阻挡时将直接在其位置引爆。如果它的Trajectory.ProximityImpact次数还没耗尽,它也会在障碍物位置引爆一个Trajectory.ProximityWarhead。在它被阻挡前,Trajectory.ProximityImpact也将不会对载具或战机造成伤害。Trajectory.ThroughBuildingcontrols whether the projectile will not be obstructed by buildings. When it is obstructed, it will be directly detonated at its location. If it still haveTrajectory.ProximityImpacttimes, it will also detonate aTrajectory.ProximityImpactat the location of the obstacle. Before the projectile being blocked,Trajectory.ProximityImpactwill also not cause damage to buildings.Trajectory.ThroughBuilding控制抛射体是否不会被建筑阻挡。当它被阻挡时将直接在其位置引爆。如果它的Trajectory.ProximityImpact次数还没耗尽,它也会在障碍物位置引爆一个Trajectory.ProximityWarhead。在它被阻挡前,Trajectory.ProximityImpact也将不会对建筑造成伤害。Trajectory.DamageEdgeAttenuationcontrols the edge attenuation ratio of projectile damage (includes all types of the trajectory's damage), that is, the actual damage caused will be this value multiplied by the ratio of the current distance to the weapon's range. Can NOT be set to a negative value.Trajectory.DamageEdgeAttenuation控制抛射体伤害的边缘衰减比例(包括轨迹添加的所有伤害类型),即实际造成的伤害是将此值乘以当前距离与武器射程的比值。不能设为负数。Trajectory.DamageCountAttenuationcontrols the attenuation coefficient related to frequency of projectile damage (includes all types of the trajectory's damage), that is, how many times the next damage after each bounce is the damage just caused. Can NOT be set to a negative value.Trajectory.DamageCountAttenuation控制抛射体伤害的次数衰减系数(包括轨迹添加的所有伤害类型),即每次造成伤害后的下一次伤害会是多少倍。不能设为负数。
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory.PassDetonate=false ; boolean
Trajectory.PassDetonateWarhead= ; WarheadType
Trajectory.PassDetonateDamage= ; integer
Trajectory.PassDetonateDelay=1 ; integer, game frames
Trajectory.PassDetonateInitialDelay=0 ; integer, game frames
Trajectory.PassDetonateLocal=false ; boolean
Trajectory.ProximityImpact=0 ; integer
Trajectory.ProximityWarhead= ; WarheadType
Trajectory.ProximityDamage= ; integer
Trajectory.ProximityRadius=0.7 ; floating point value
Trajectory.ProximityDirect=false ; boolean
Trajectory.ProximityMedial=false ; boolean
Trajectory.ProximityAllies=false ; boolean
Trajectory.ProximityFlight=false ; boolean
Trajectory.ThroughVehicles=true ; boolean
Trajectory.ThroughBuilding=true ; boolean
Trajectory.DamageEdgeAttenuation=1.0 ; floating point value
Trajectory.DamageCountAttenuation=1.0 ; floating point value
- The listed Warheads in
Trajectory.PassDetonateWarheadandTrajectory.ProximityWarheadmust be listed in[Warheads]for them to work.Trajectory.PassDetonateWarhead和Trajectory.ProximityWarhead中使用的弹头必须注册在[Warheads]中以保证正确工作。 - Make sure you set a low
Trajectory.ProximityRadiusvalue unless necessary.除非必要,否则请确保你设置了一个较低的
Trajectory.ProximityRadius值。
SubjectToBuildingsandTrajectory.ThroughBuildingare different. But the two are not in conflict and can take effect simultaneously. The former can affect the search for enemies and ignore the main target, follows the settings of Ares and will only self destruct when conditions are met. While the latter will self destruct when touching only non-allies building (including main target) and trigger its effect ifTrajectory.ProximityImpactis set.SubjectToBuildings和Trajectory.ThroughBuilding是不同的。但两者并不冲突,且可以同时生效。前者可以影响对敌人的搜索,忽略主要目标,遵循 Ares 的设置,只有在条件满足时才会自毁。而后者在接触非盟友建筑(包括主要目标)时都会自毁,如果设置了Trajectory.ProximityImpact,则还会触发其效果。- Simply put,
Trajectory.PassDetonateis periodically effect andTrajectory.ProximityImpactis once per person effect.简而言之,
Trajectory.PassDetonate是周期性效果,Trajectory.ProximityImpact是一人一次的效果。 - If
Trajectory.ProximityImpactis set to non-zero, the default value ofTrajectory.PeacefulVanishwill be changed.如果设置了
Trajectory.ProximityImpact为非 0 值,Trajectory.PeacefulVanish的默认值会被改变。
- Of course, there are also some general functions for launching weapons. Effective for all types too.
当然,还有一些发射武器的通用功能。同样对所有类型都有效。
Trajectory.DisperseWeaponsdefines the dispersal weapons of the projectile.Trajectory.DisperseWeapons定义抛射体的扩散武器。Trajectory.DisperseBurstsdefines how many corresponding weapons each time the projectile will fire. When the quantity is lower thanTrajectory.DisperseWeapons, the last value in the list will be used.Trajectory.DisperseBursts定义抛射体每次各扩散几个对应的武器。如果数量少于Trajectory.DisperseWeapons,将使用该列表的最后一项。Trajectory.DisperseCountscontrols how many times the projectile can fire the weapon. Set to a negative value means unlimited times. If set to zero, the cooling will be calculated directly without firing the weapon. If the quantity is less than the number of firing groups, the last value in the list will be used.Trajectory.DisperseCounts控制抛射体需要各扩散几次对应武器。负数视为无限。为零会直接计算冷却而不发射。如果少于发射组数量,将使用该列表的最后一项。Trajectory.DisperseDelayscontrols the interval delays for dispersing the weapons, at least 1 frame. If the quantity is less than the number of firing groups, the last value in the list will be used.Trajectory.DisperseDelays控制抛射体发射扩散武器的间隔,至少 1 帧。如果少于发射组数量,将使用该列表的最后一项。Trajectory.DisperseCyclecontrols how many rounds of weapons the projectile can fire, zero will not fire weapons, and negative numbers are considered infinite.Trajectory.DisperseCycle控制抛射体能够发射几轮武器,为零不会发射武器,负数视为无限。Trajectory.DisperseInitialDelaycontrols the initial delay for dispersing the weapons defined byTrajectory.DisperseWeapons.Trajectory.DisperseInitialDelay控制抛射体发射Trajectory.DisperseWeapons的初始间隔。Trajectory.DisperseEffectiveRangecontrols the weapon dispersing timer to start counting only within this distance of reaching the target. Set to 0 to disable this function. Set to a negative value means it will only Disperse the weapon at most once before detonation.Trajectory.DisperseEffectiveRange控制抛射体扩散武器计时器会在距离目标这么近的距离时才会开始计时。为0代表不启用该功能。为负数代表只有在即将引爆本体的瞬间扩散最多一次的武器。Trajectory.DisperseSeparatecontrols whether the projectile no longer fire all the weapons inTrajectory.DisperseWeaponsat once and instead fire a group of weapons in the list order, followingTrajectory.DisperseBursts. And control how to calculate the number of firing groups. In short, if true, group the weapons and fire them the corresponding counts of times inTrajectory.DisperseWeaponsorder. Otherwise, fire all weapons simultaneously and fire sequentially inTrajectory.DisperseCountsorder.Trajectory.DisperseSeparate控制抛射体每次扩散武器时,是否不再一次性发射Trajectory.DisperseWeapons中的所有武器,而是按顺序发射列表中的一组武器,遵循其Trajectory.DisperseBursts。并控制如何计算发射组的数量。简单来说,如果为 true ,会按照Trajectory.DisperseWeapons的顺序将武器分组并发射对应次数。否则会按照Trajectory.DisperseCounts顺序依次同时发射所有武器。Trajectory.DisperseRetargetcontrols whether the Disperse weapons will find new targets on their own. Using theRange,CanTarget,CanTargetHouses, requiredAttachedEffectsof weapons to search new targets.Trajectory.DisperseRetarget控制扩散的武器是否自行寻找新目标。使用武器的Range、CanTarget、CanTargetHouses和所需的AttachedEffects来搜索新目标。Trajectory.DisperseLocationcontrols whether the Disperse weapons will search for new targets at the center of the spreading position, otherwise they will focus on the original target.Trajectory.DisperseLocation控制扩散的武器在自行寻找新目标时,是否以扩散位置为中心的位置寻找,否则以原目标为中心位置。Trajectory.DisperseTendencycontrols whether the Disperse weapons will choose the original target as the first new target in each group of weapons.Trajectory.DisperseTendency控制扩散的武器中每组武器的第一个目标是否选择原目标。Trajectory.DisperseHolisticcontrols whether the Disperse weapons will choose targets that are in different states from the original target (in air and on ground).Trajectory.DisperseHolistic控制扩散的武器是否选择和原目标不同状态的目标(在空中和在地上两种状态)。Trajectory.DisperseMarginalcontrols whether the Disperse weapons will choose unimportant items such as trees (regard as on ground), streetlights (regard as on ground) or bullets (regard as in air) as secondary targets.Trajectory.DisperseMarginal控制扩散的武器是否会选择数木(视为在地上)、路灯(视为在地上)或可拦截抛体(视为在空中)等物体作为次要目标。Trajectory.DisperseDoRepeatcontrols whether the Disperse weapons will select duplicate targets when the number of targets is insufficient. If it is set to true, when the weapon can select both the technos and the ground as targets, the technos will be prioritized, then if all non-repeating technos have been selected and the weapon can still be launched at this time (in each round of salvo), it will start selecting duplicate technos. If it is set to false, when the weapon can select both the technos and the ground as targets, the technos will be prioritized, followed by the ground cells, then if all non-repeating targets have been selected and the weapon can still be launched at this time (in each round of salvo), it will stop firing remaining bursts. (The priority of secondary targets is between the technos and the ground.)Trajectory.DisperseDoRepeat控制抛射体扩散的武器是否会因为搜索到的目标数量不足而尝试攻击相同目标。是则,当武器可以攻击单位和地面时,优先攻击单位,如果所有非重复单位都已选择,并且武器此时(在每一轮齐射中)仍然可以发射,它将开始选择重复单位;否则,当武器可以攻击单位和地面时,优先攻击单位,然后尝试攻击所有可被攻击的地面格子,如果所有非重复目标都已被选择,并且武器此时(在每一轮齐射中)仍然可以发射,则会停止发射剩余次数。(次要目标的优先级在单位和地面之间。)Trajectory.DisperseSuicidecontrols whether the projectile will self destruct after the number of times it spreads the weapon has been exhausted.Trajectory.DisperseSuicide控制抛射体是否在扩散武器的次数耗尽后自爆。Trajectory.DisperseFromFirercontrols whether the weapons will be fired by the firer towards the projectile. Otherwise, the tracing weapons will be fired from the projectile towards the target. WhenTrajectory=EngraveorTrajectory=Tracing, the default is true, while others are false.Trajectory.DisperseFromFirer控制抛射体发射的扩散武器是否由单位朝抛体发射。否则是由抛体朝目标发射。当Trajectory=Engrave或Trajectory=Tracing时,默认值为 true ,否则为 false 。Trajectory.DisperseFaceCheckcontrols whether the projectile will check its orientation before firing the weapons. Ignore this ifTrajectory.BulletFacing=VelocityorTrajectory.BulletFacing=Spin.Trajectory.DisperseFaceCheck控制抛射体在发射武器前是否检查抛射体的朝向。如果Trajectory.BulletFacing=Velocity或Trajectory.BulletFacing=Spin会无视该项。Trajectory.DisperseForceFirecontrols whether still fire disperse weapon when the projectile itself has no target or the target is beyond the weapon's range.Trajectory.DisperseForceFire控制抛射体本身在没有目标或目标超出射程时是否仍然发射扩散武器。Trajectory.DisperseCoordcontrols the FLH where the projectile fires the weapon when setTrajectory.DisperseFromFirerto false.Trajectory.DisperseCoord控制当禁用Trajectory.DisperseFromFirer时从抛射体上发射武器的 FLH 位置。
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory.DisperseWeapons= ; list of WeaponTypes
Trajectory.DisperseBursts= ; list of integers
Trajectory.DisperseCounts= ; list of integers
Trajectory.DisperseDelays= ; list of integers, game frames
Trajectory.DisperseCycle=0 ; integer
Trajectory.DisperseInitialDelay=0 ; integer, game frames
Trajectory.DisperseEffectiveRange=0 ; floating point value
Trajectory.DisperseSeparate=false ; boolean
Trajectory.DisperseRetarget=false ; boolean
Trajectory.DisperseLocation=false ; boolean
Trajectory.DisperseTendency=false ; boolean
Trajectory.DisperseHolistic=false ; boolean
Trajectory.DisperseMarginal=false ; boolean
Trajectory.DisperseDoRepeat=false ; boolean
Trajectory.DisperseSuicide=true ; boolean
Trajectory.DisperseFromFirer= ; boolean
Trajectory.DisperseFaceCheck=false ; boolean
Trajectory.DisperseForceFire=true ; boolean
Trajectory.DisperseCoord=0,0,0 ; integer - Forward,Lateral,Height
- The listed Weapons in
Trajectory.DisperseWeaponsmust be listed in[WeaponTypes]for them to work.Trajectory.DisperseWeapons中使用的武器必须注册在[WeaponTypes]中以保证正确工作。 - If you set
Trajectory.DisperseRetarget=true, also make sure you setTrajectory.DisperseWeaponsa lowRangevalue unless necessary.如果你设置了
Trajectory.DisperseRetarget=yes,那么同样的,除非必要,否则请确保你给Trajectory.DisperseWeapons中所列出的所有武器设置了一个较低的Range值。
- Although
Trajectory.DisperseDoRepeat=falsewill disable duplicate target selection, if the weapon is able to attack the ground, it may still attack duplicate targets by locking onto the cell where the target is located.尽管
Trajectory.DisperseDoRepeat=no会禁用重复选择目标,但若武器能够攻击地面,则仍然可能因为锁定到目标所处的格子而攻击到重复目标。 Trajectory.DisperseRetargetwill not change the true target of the projectile itself.Trajectory.DisperseRetarget不会改变抛射体本身真正的目标。- If
Trajectory.DisperseCycleis set to non-zero, the default value ofTrajectory.PeacefulVanishwill be changed.如果设置了
Trajectory.DisperseCycle为非 0 值,Trajectory.PeacefulVanish的默认值会被改变。
Straight trajectory
- Self-explanatory, is a straight-shot trajectory.
不言自明,这是一种直线射击轨迹。
Trajectory.Straight.PassThroughenables special case logic where the projectile does not detonate in contact with the target but instead travels up to a distance defined byTrajectory.DetonationDistance. Note that ifTrajectory.DetonationDistanceis a non negative value, the firing angle of the projectile is adjusted with this in mind, making it fire straight ahead if the target is on same elevation.Trajectory.Straight.PassThrough启用特殊的逻辑:抛射体在接触目标时不会引爆而是继续飞行到由Trajectory.DetonationDistance定义的距离。注意如果Trajectory.DetonationDistance是一个非负数,抛射体发射角度会受此影响:如果与目标处于同一高度那么直接向前发射。Trajectory.Straight.ConfineAtHeightcontrols the height above ground that projectile will try to travel as it can. It can not move down from the cliff by settingSubjectToCliffsto true. It can be cancelled by setting as a non positive integer. It will be forcibly cancelled by settingTrajectory.Speedabove 256. IfTrajectory.PassDetonateLocalis set to true at the same time, the vertical speed will not be limited.Trajectory.Straight.ConfineAtHeight控制抛射体尽可能保持的飞行高度。如果启用了SubjectToCliffs会使其不得从悬崖上向下移动。可以通过设置为非正整数来取消。如果Trajectory.Speed大于 256,它将被强制取消。如果同时启用了Trajectory.PassDetonateLocal,其垂直方向上的速度将不受限制。
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory.Straight.PassThrough=false ; boolean
Trajectory.Straight.ConfineAtHeight=0 ; integer
Bombard trajectory
- Similar trajectory to
Straight, but targets a coordinate between the attacker and intended target first. When the projectile approaches that turning point, it'll turn to the intended target and explodes when it hits the target or ground.类似于
Straight但首先瞄准攻击者和目标间的某个坐标。当抛射体接近该拐点后它才会转向目标并在击中目标或地面时引爆。Trajectory.Bombard.Heightcontrols the height of the turning point.Trajectory.Bombard.Height控制拐点的高度。Trajectory.Bombard.FallPercentcontrols the distance of the turning point by its percentage of the total distance between attacker and intended target. If set to 0%, then it'll fly up vertically. If set to 100%, then it'll travel to the top of the intended target.Trajectory.Bombard.FallPercent通过拐点位置占发射位置与目标位置间总距离的百分比来控制拐点的距离。如果设为 0% 则它将在开火位置的正上方。如果设为 100% 则它将位于目标正上方。- For each launch the turning point percentage could add or minus a random value, which is not greater than
Trajectory.Bombard.FallPercentShift. If set to 0%, random shift will be disabled.每次发射时拐点位置的百分比值可以随机浮动,该值不大于
Trajectory.Bombard.FallPercentShift。如果设为 0 则随机调整将被禁用。 - You can also makes the turning point scatter randomly in a circle with
Trajectory.Bombard.FallScatter.Maxas its radius. If set to 0, random scatter will be disabled.Trajectory.Bombard.FallScatter.Mincan be used to determine the minimum radius of the circle. IfTrajectory.Bombard.FallScatter.Linearset to true, the random scatter will be limited to the line that is vertical to the original direction of the projectile.你还可以使拐点在以
Trajectory.Bombard.FallScatter.Max为半径的圆内随机散布。如果设为 0 则随机散布将被禁用。Trajectory.Bombard.FallScatter.Min可用于确定圆的最低半径。如果Trajectory.Bombard.FallScatter.Linear设为 true,则随机散布范围将被限制在发射位置与目标位置之间连线的垂面。
- For each launch the turning point percentage could add or minus a random value, which is not greater than
Trajectory.Bombard.FreeFallOnTargetcontrols how it'll hit the intended target. If set to true, the projectile will be respawned above the intended target and free fall. If set to false, the projectile will travel to the intended target from the turning point.Trajectory.Bombard.FreeFallOnTarget控制它将如何击中目标。如果设为 true,则抛射体将在目标上方重新生成并自由落体。如果设为 false,则抛射体将正常从拐点位置飞向目标。Trajectory.Bombard.NoLaunchcontrols whether the attacker will fire the projectile by itself. If set to true, projectile will directly fall from the turning point.Trajectory.Bombard.NoLaunch控制攻击者是否会自行发射抛射体。如果设为 true,则抛射体将直接从拐点位置下落。Trajectory.Bombard.FallSpeedcontrols the initial speed of the projectile after it turns. If set to 0.0, then it'll useTrajectory.Speed. Can't work whenTrajectory.Bombard.FreeFallOnTargetset to true.Trajectory.Bombard.FallSpeed控制抛射体经过拐点后的初速度。如果设为 0.0,则它将使用Trajectory.Speed。当Trajectory.Bombard.FreeFallOnTarget设为 true 时将无法工作。Trajectory.Bombard.TurningPointAnims, if set, will play an anim when the projectile reaches the turning point. IfTrajectory.Bombard.FreeFallOnTargetis set to true, it'll be spawned above the target with the projectile together. IfTrajectory.Bombard.NoLaunchis set to true, it'll be played at where the projectile falls, no matter if it's free fall or not. If more than one animation is listed, a random one is selected.Trajectory.Bombard.TurningPointAnims如果设置将会在抛射体抵达拐点时播放动画。如果Trajectory.Bombard.FreeFallOnTarget设为 true,则抛射体将与目标一起在目标上方生成。如果Trajectory.Bombard.NoLaunch设为 true,则无论抛射体是否自由落体,它都将在抛射体下落的位置播放动画。如果列出了多个动画,则将随机选择一个。
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory.Bombard.Height=0.0 ; floating point value
Trajectory.Bombard.FallPercent=1.0 ; floating point value
Trajectory.Bombard.FallPercentShift=0.0 ; floating point value
Trajectory.Bombard.FallScatter.Max=0.0 ; floating point value
Trajectory.Bombard.FallScatter.Min=0.0 ; floating point value
Trajectory.Bombard.FallScatter.Linear=false ; boolean
Trajectory.Bombard.FreeFallOnTarget=true ; boolean
Trajectory.Bombard.NoLaunch=false ; boolean
Trajectory.Bombard.FallSpeed=0.0 ; floating point value
Trajectory.Bombard.TurningPointAnims= ; List of AnimationTypes
Missile trajectory
- Its trajectory looks a bit like a
ROT, but its settings are more flexible. It also has a unique trajectory.它的轨迹看起来有点像
ROT,但它的设置更灵活。它也有独特的轨迹。Trajectory.Missile.UniqueCurvecontrols whether to enable simulated Qian Xuesen trajectory. After enabling this, it will NOT respect the other items.Trajectory.Missile.UniqueCurve控制是否启用模拟钱学森弹道。启用后,它将不再遵从其它设置。Trajectory.Missile.PreAimCoordcontrols the initial flight direction of the projectile, and after reaching this coordinate, it will begin to turn towards the target direction. When it is set to 0,0,0 , it will directly face the target.Trajectory.Missile.PreAimCoord控制抛射体初始会朝着哪个方向飞行,在到达这个坐标后,它会开始朝着目标转向。为 0,0,0 时会直接朝着目标前进。Trajectory.Missile.FacingCoordcontrols whether the forward direction inTrajectory.Missile.PreAimCoordis depending on the orientation of the firer. By default, it will depend on the vector between the firer and the target.Trajectory.Missile.FacingCoord控制抛射体Trajectory.Missile.PreAimCoord的朝向是否跟随单位朝向。Trajectory.Missile.ReduceCoordcontrols whetherTrajectory.Missile.PreAimCoorddefines the initial movement coordinates when the attack distance is 10 cells, and the actual initial movement coordinates will change with the length of the attack distance. It can be simply understood as an optimization term aimed at ensuring hits at close range.Trajectory.Missile.ReduceCoord控制抛射体Trajectory.Missile.PreAimCoord所指定的坐标是否代表距离 10 格远时的坐标,其实际坐标会随攻击距离变化。它可以简单地理解为一个确保近距离命中的优化手段。
Trajectory.Missile.LaunchSpeedcontrols the initial flight speed of the projectile.Trajectory.Missile.LaunchSpeed控制抛射体的初始飞行速度。Trajectory.Missile.Accelerationcontrols the acceleration of the projectile's flight speed, increasing or decreasing the speed per frame according to this value, the final speed will beTrajectory.Speed. The velocity superposition with gravity will not be limited by this value.Trajectory.Missile.Acceleration控制抛射体飞行速度的加速度,按照此值每帧增加或减少速度,达到Trajectory.Speed。与重力的速度叠加不受此值限制。Trajectory.Missile.TurningSpeedcontrols the turning speed of the projectile's locomotion (moving direction) which refers to the maximum angle that the projectile can rotate per frame in terms of direction.Trajectory.Missile.TurningSpeed控制抛射体运动(移动方向)的转向速度,即抛射体的移动方向每帧最多能旋转多少角度。
Trajectory.Missile.LockDirectioncontrols whether after reachingTrajectory.Missile.PreAimCoordand completing the first turn, the projectile will lock the direction of motion without further adjustment.Trajectory.Missile.LockDirection控制抛射体是否在到达Trajectory.Missile.PreAimCoord并完成初次转向后是否锁定运动方向不再调整。Trajectory.Missile.CruiseEnablecontrols whether after reachingTrajectory.Missile.PreAimCoord, the projectile will maintain altitude while moving towards the target.Trajectory.Missile.CruiseEnable控制抛射体在达到Trajectory.Missile.PreAimCoord后是否需要保持高度朝着目标前进。Trajectory.Missile.CruiseUnableRangecontrols how far away it is from the target to end the cruise phase, no longer maintaining the cruise altitude, and begins to move directly towards the target. If the distance is already below this value by the timeTrajectory.Missile.PreAimCoordis reached, the cruise phase will be skipped.Trajectory.Missile.CruiseUnableRange控制抛射体距离目标多远时结束巡航阶段,不再保持巡航高度,并开始朝向目标前进,如果在达到Trajectory.Missile.PreAimCoord时已经小于该值,会跳过巡航阶段。Trajectory.Missile.CruiseAltitudecontrols the altitude of the projectile in the cruise phase.Trajectory.Missile.CruiseAltitude控制抛射体的巡航阶段时的巡航高度。Trajectory.Missile.CruiseAlongLevelcontrols whether to calculateTrajectory.Missile.CruiseAltitudeby the ground height of the current position, otherwise it will be calculated by the height of the launch position.Trajectory.Missile.CruiseAlongLevel控制是否根据当前抛射体位置的地面高度计算Trajectory.Missile.CruiseAltitude,否则将根据发射位置的高度进行计算。
Trajectory.Missile.SuicideAboveRangecontrols the projectile to self destruct directly after reaching the flight distance. Set to 0 to disable suicide. When set to a negative number, its absolute value represents a multiple of the initial distance.Trajectory.Missile.SuicideAboveRange控制抛射体在飞行距离达到该值后直接自爆。为 0 代表不因此自爆。当设置为负数时其绝对值代表初始距离的倍数。Trajectory.Missile.SuicideShortOfROTcontrols whether the projectile will explode when it detected its insufficient turning ability.Trajectory.Missile.SuicideShortOfROT控制抛射体是否在发现转向能力不足时自爆。
In rulesmd.ini:
Trajectory.Missile.UniqueCurve=false ; boolean
Trajectory.Missile.PreAimCoord=0,0,0 ; integer - Forward,Lateral,Height
Trajectory.Missile.FacingCoord=false ; boolean
Trajectory.Missile.ReduceCoord=true ; boolean
Trajectory.Missile.LaunchSpeed=0 ; floating point value
Trajectory.Missile.Acceleration=10.0 ; floating point value
Trajectory.Missile.TurningSpeed=10.0 ; floating point value
Trajectory.Missile.LockDirection=false ; boolean
Trajectory.Missile.CruiseEnable=false ; boolean
Trajectory.Missile.CruiseUnableRange=5.0 ; floating point value
Trajectory.Missile.CruiseAltitude=800 ; integer
Trajectory.Missile.CruiseAlongLevel=false ; boolean
Trajectory.Missile.SuicideAboveRange=-3.0 ; floating point value
Trajectory.Missile.SuicideShortOfROT=false ; boolean
- The trajectory can be affected by
Gravity. If you are sure that you do not need it to be affected by it, you can setGravity=0separately.这种轨迹会受到
Gravity的影响,如果你不希望其受到它的影响,你可以单独为其设置Gravity=0。 - If the value of
Trajectory.Missile.CruiseUnableRangeis too small, it may cause the projectile to be permanently stay in cruise mode.如果
Trajectory.Missile.CruiseUnableRange过小,则可能导致抛体永久处在巡航状态。
Engrave trajectory
- Visually, like the thermal lance. Calling it 'trajectory' may not be appropriate. It does not read the settings on the weapon.
从视觉上看,就像是热能射线枪。称之为 “轨迹” 也许并不合适。它不会读取武器上的设置。
Trajectory.Engrave.SourceCoordcontrols the starting point of engraving line segment. Taking the target as the coordinate center. Specifically, it will start from the firing position when set to 0,0 . The height of the point will always at ground level, unless the target is in the air.Trajectory.Engrave.SourceCoord控制雕刻线段的起点。以目标为坐标中心。特别的是,当设置为 0,0 时,它将从开火位置开始。除非目标在空中,否则点的高度将始终位于地面。Trajectory.Engrave.TargetCoordcontrols the end point of engraving line segment. IfTrajectory.Durationis set to a positive number, it is only used for direction calculation. Taking the target as the coordinate center. The height of the point will always at ground level, unless the target is in the air.Trajectory.Engrave.TargetCoord控制雕刻线段的终点。如果Trajectory.Duration设置为正数,它将仅用于方向计算。以目标为坐标中心。除非目标在空中,否则点的高度将始终位于地面。Trajectory.Engrave.IsLasercontrols whether laser drawing is required.Trajectory.Engrave.IsLaser控制是否绘制切割激光。Trajectory.Engrave.IsIntensecontrols whether the engrave laser will be brighter and thicker.Trajectory.Engrave.IsIntense控制切割激光是否会更亮更粗。Trajectory.Engrave.IsHouseColorcontrols whether set the engrave laser to draw using player's house color.Trajectory.Engrave.IsHouseColor控制切割激光是否使用玩家阵营颜色。Trajectory.Engrave.IsSingleColorcontrols whether set the engrave laser to draw using onlyTrajectory.Engrave.LaserInnerColor.Trajectory.Engrave.IsSingleColor控制切割激光的绘制是否只使用Trajectory.Engrave.LaserInnerColor。Trajectory.Engrave.LaserInnerColorcontrols the inner color of the engrave laser.Trajectory.Engrave.LaserInnerColor控制切割激光的内部颜色Trajectory.Engrave.LaserOuterColorcontrols the outer color of the engrave laser.Trajectory.Engrave.LaserOuterColor控制切割激光的外围颜色Trajectory.Engrave.LaserOuterSpreadcontrols the spread color of the engrave laser.Trajectory.Engrave.LaserOuterSpread控制切割激光的扩散颜色Trajectory.Engrave.LaserThicknesscontrols the thickness of the engrave laser.Trajectory.Engrave.LaserThickness控制切割激光的粗细程度。Trajectory.Engrave.LaserDurationcontrols the duration of the engrave laser.Trajectory.Engrave.LaserDuration控制切割激光的持续时间Trajectory.Engrave.LaserDelaycontrols how often to draw the engrave laser.Trajectory.Engrave.LaserDelay控制切割激光多久绘制一次。
Trajectory.Engrave.AttachToTargetcontrols whether the center position of the engrave laser will update with the target position.Trajectory.Engrave.AttachToTarget控制切割激光的中心位置是否随目标位置变化。Trajectory.Engrave.UpdateDirectioncontrols whether the engrave laser updates the direction with the firer and target position.Trajectory.Engrave.UpdateDirection控制切割激光是否随发射者和目标位置更新角度。
In rulesmd.ini:
Trajectory.Engrave.SourceCoord=0,0 ; integer - Forward,Lateral
Trajectory.Engrave.TargetCoord=0,0 ; integer - Forward,Lateral
Trajectory.Engrave.IsLaser=true ; boolean
Trajectory.Engrave.IsIntense=false ; boolean
Trajectory.Engrave.IsHouseColor=false ; boolean
Trajectory.Engrave.IsSingleColor=false ; boolean
Trajectory.Engrave.LaserInnerColor=0,0,0 ; integer - Red,Green,Blue
Trajectory.Engrave.LaserOuterColor=0,0,0 ; integer - Red,Green,Blue
Trajectory.Engrave.LaserOuterSpread=0,0,0 ; integer - Red,Green,Blue
Trajectory.Engrave.LaserThickness=3 ; integer
Trajectory.Engrave.LaserDuration=1 ; integer
Trajectory.Engrave.LaserDelay=1 ; integer, game frames
Trajectory.Engrave.AttachToTarget=false ; boolean
Trajectory.Engrave.UpdateDirection=false ; boolean
- It's best not to let it be intercepted.
最好不要设置让其可被拦截。
Trajectory.Engrave.IsIntenseandTrajectory.Engrave.LaserThicknessrequire setTrajectory.Engrave.IsHouseColororTrajectory.Engrave.IsSingleColorto true to take effect.Trajectory.Engrave.IsIntense和Trajectory.Engrave.LaserThickness要求启用Trajectory.Engrave.IsHouseColor或Trajectory.Engrave.IsSingleColor才能生效。
- Directly using the laser drawing in
Trajectory=EngravewithTrajectory.PassDetonateWarheadis more cost-effective than usingTrajectory.DisperseWeapons. If you need the laser to be blocked by the Fire Storm Wall, you can try using the latter.直接使用
Trajectory=Engrave中的激光绘制并使用Trajectory.PassDetonateWarhead相比使用Trajectory.DisperseWeapons性能更高效,如果你希望激光会被火风暴墙阻挡,你可以尝试使用后者。 - The default value of
Trajectory.PeacefulVanishwill be changed when using this type of trajectory.Trajectory.PeacefulVanish的默认值在使用此类轨迹抛射体时会被改变。
Parabola trajectory
- As the name says, this is a completely reset
Arcingwith different enhanced functions.顾名思义,这是一种完全重置且拥有不同增强功能的类
Arcing轨迹。Trajectory.Parabola.OpenFireModecontrols how should the projectile be launched. This has the following 6 modes.Trajectory.Parabola.OpenFireMode控制抛射体应该如何发射,它有如下 6 种模式:- Speed - Automatic calculation mode with fixed horizontal velocity, using
Trajectory.Speedand target coordinates as calculation conditions.Speed - 固定水平速度的自动计算模式,使用
Trajectory.Speed和目标坐标作为计算条件。 - Height - Automatic calculation mode with fixed maximum height, useing
Trajectory.Parabola.ThrowHeightand target coordinates as calculation conditions, i.e. the detonation time of the projectile is relatively fixed.Height - 固定最大高度的自动计算模式,使用
Trajectory.Parabola.ThrowHeight和目标坐标作为计算条件,即抛射体的引爆时间将相对固定。 - Angle - Automatic calculation mode with fixed fire angle, useing
Trajectory.Parabola.LaunchAngleand target coordinates as calculation conditions.Angle - 固定开火角度的自动计算模式,使用
Trajectory.Parabola.LaunchAngle和目标坐标作为计算条件。 - SpeedAndHeight - Fixed horizontal velocity and maximum height mode, using
Trajectory.SpeedandTrajectory.Parabola.ThrowHeightas calculation conditions, i.e. the trajectory will only undergo altitude changes with the height of the target.SpeedAndHeight - 固定水平速度和最大高度模式,使用
Trajectory.Speed和Trajectory.Parabola.ThrowHeight作为计算条件,即抛射体将只进行高度变化,高度随目标高度变化。 - HeightAndAngle - Fixed maximum height and fire angle mode, using
Trajectory.Parabola.ThrowHeightandTrajectory.Parabola.LaunchAngleas calculation conditions, i.e. the trajectory will change horizontally with the height of the target.HeightAndAngle - 固定最大高度和开火角度模式,使用
Trajectory.Parabola.ThrowHeight和Trajectory.Parabola.LaunchAngle作为计算条件,即抛射体将随高度变化而水平变化。 - SpeedAndAngle - Fixed horizontal velocity and fire angle mode, using
Trajectory.SpeedandTrajectory.Parabola.LaunchAngleas calculation conditions, i.e. the trajectory will be permanently fixed.SpeedAndAngle - 固定水平速度和开火角度模式,使用
Trajectory.Speed和Trajectory.Parabola.LaunchAngle作为计算条件,即抛射体轨迹恒定。
- Speed - Automatic calculation mode with fixed horizontal velocity, using
Trajectory.Parabola.ThrowHeightcontrols the maximum height of the projectile and is only used for modesHeight,SpeedAndHeight, orHeightAndAngle. The specific height will be determined by taking the larger of the launch height and the target height then increasing this value. Non positive numbers are not supported.Trajectory.Parabola.ThrowHeight控制抛射体的最大高度,仅用于模式Height、SpeedAndHeight或HeightAndAngle。具体高度将由取发射高度和目标高度中的较大值然后增加此值决定。不支持非正数。Trajectory.Parabola.LaunchAnglecontrols the fire angle of the projectile and is only used for modesAngle,HeightAndAngle, orSpeedAndAngle. Only supports -90.0 ~ 90.0 (Cannot use boundary values) in ModeAngleorSpeedAndAngle, and 0.0 ~ 90.0 (Cannot use boundary values) in ModeHeightAndAngle.Trajectory.Parabola.LaunchAngle控制抛射体的开火角度,仅用于模式Angle、HeightAndAngle或SpeedAndAngle。在模式Angle或SpeedAndAngle中仅支持 -90.0 ~ 90.0(不能使用边界值),在模式HeightAndAngle中则是 0.0 ~ 90.0(不能使用边界值)。Trajectory.Parabola.DetonationAnglecontrols when the angle between the projectile in the current velocity direction and the horizontal plane is less than this value, it will detonate prematurely. Taking effect when the value is at -90.0 ~ 90.0 (Cannot use boundary values).Trajectory.Parabola.DetonationAngle控制当抛射体当前速度方向与水平方向的角度小于此值时,它将提前引爆。当值为 -90.0 ~ 90.0(不能使用边界值)时生效。Trajectory.Parabola.BounceTimescontrols how many times can it bounce back when the projectile hits the ground or cliff. Be aware that excessive projectile speed may cause abnormal operation.Trajectory.Parabola.BounceTimes控制抛射体在击中地面或悬崖时可以弹跳的次数。注意过高的抛射体速度可能导致异常操作。Trajectory.Parabola.BounceOnTargetcontrols the projectile can bounce on which cells or technos.Trajectory.Parabola.BounceOnTarget控制抛射体能在哪些格子和单位上弹跳。Trajectory.Parabola.BounceOnHousescontrols the projectile can bounce on whose technos.Trajectory.Parabola.BounceOnHouses控制抛射体能在哪些所属的单位上弹跳。Trajectory.Parabola.BounceDetonatecontrols whether it detonates the warhead once extra during each bounce.Trajectory.Parabola.BounceDetonate控制是否在每次弹跳时额外引爆一次弹头。Trajectory.Parabola.BounceAttenuationcontrols the attenuation coefficient of projectile bounce damage, that is, how many times the next damage after each bounce is the damage just caused. This will also affect the damage of the final detonation.Trajectory.Parabola.BounceAttenuation控制抛射体弹跳伤害的衰减系数,即每次造成伤害后的下一次伤害会是多少倍。这也将影响最终引爆的伤害。Trajectory.Parabola.BounceCoefficientcontrols the attenuation coefficient of projectile bounce elasticity, that is, how many times the speed after each bounce is the speed before bouncing.Trajectory.Parabola.BounceCoefficient控制抛射体弹跳弹性的衰减系数,即每次弹跳后的速度会是多少倍。
In rulesmd.ini:
Trajectory.Parabola.OpenFireMode=Speed ; ParabolaFireMode value enumeration (Speed|Height|Angle|SpeedAndHeight|HeightAndAngle|SpeedAndAngle)
Trajectory.Parabola.ThrowHeight=600 ; integer
Trajectory.Parabola.LaunchAngle=30 ; floating point value
Trajectory.Parabola.DetonationAngle=-90.0 ; floating point value
Trajectory.Parabola.BounceTimes=0 ; integer
Trajectory.Parabola.BounceOnTarget=land ; List of Affected Target Enumeration (none|land|water|empty|infantry|units|buildings|all)
Trajectory.Parabola.BounceOnHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
Trajectory.Parabola.BounceDetonate=false ; boolean
Trajectory.Parabola.BounceAttenuation=0.8 ; floating point value
Trajectory.Parabola.BounceCoefficient=0.8 ; floating point value
- If
Trajectory.Parabola.OpenFireMode=Angle, the performance consumption is high, and may have no solution. It is not recommended to enableSubjectToCliffsor enableAAwith a smallerMinimumRangewhen using this mode.在
Trajectory.Parabola.OpenFireMode=Angle模式下,性能消耗较高,且由于可能攻击目标过高而无解,不建议使用此模式时启用SubjectToCliffs或启用AA并使用较小的MinimumRange。
- Be aware that
Trajectory.DetonationDistancedo not conflict withTrajectory.Parabola.BounceTimesand will take effect simultaneously. So if you want to explode the bullet only after the times of bounces is exhausted, you should setTrajectory.DetonationDistanceto a non positive value.注意
Trajectory.DetonationDistance和Trajectory.Parabola.BounceTimes并不冲突会同时生效。所以如果需要抛体只会在弹跳次数耗尽后再爆炸,请将Trajectory.DetonationDistance设置为非正数。
Tracing trajectory
- A trajectory that can keep following the target and only detonate when its survival time is exhausted.
一种可以继续跟随目标并仅在其生存时间耗尽时引爆的轨迹。
Trajectory.Tracing.TraceModecontrols how should the projectile trace the target. This is used to calculate coordinate axis ofTrajectory.Tracing.AttachCoordlocated on the tracking target. The H axis is not affected by the tilt and deflection of the tracking target, and always faces directly above. This has the following 6 modes.Trajectory.Tracing.TraceMode控制抛射体的追踪模式。这用于计算Trajectory.Tracing.AttachCoord的坐标轴,原点位于追踪目标上,H 轴不随追踪目标的倾斜偏转影响,永远朝向正上方。它有如下 6 种模式:- Connection - Line vector. Take the horizontal component of the vector between the launch position and the target position as the F axis.
Connection - 连线向量。以发射位置与目标位置之间向量的水平分量为 F 轴。
- Global - Map direction. Take the lower right side of the map as the F axis.
Global - 地图方向。以地图的右下方方向为 F 轴。
- Body - Follow the body. The F axis is the body orientation of the tracking target.
Body - 跟随身体。以追踪目标的身体朝向为 F 轴。
- Turret - Follow the turret. The F axis is the turret orientation of the tracking target.
Turret - 跟随炮塔。以追踪目标的炮塔朝向为 F 轴。
- RotateCW - Rotate clockwise. Rotate clockwise around the H axis with the resultant offset in the FL direction as the radius.
RotateCW - 顺时针旋转。以 FL 方向偏移的合成量为半径,绕 H 轴顺时针旋转。
- RotateCCW - Rotate counterclockwise. Rotate counterclockwise around the H axis with the resultant offset in the FL direction as the radius.
RotateCCW - 逆时针旋转。以 FL 方向偏移的合成量为半径,绕 H 轴逆时针旋转。
- Connection - Line vector. Take the horizontal component of the vector between the launch position and the target position as the F axis.
Trajectory.Tracing.TraceTheTargetcontrols whether the target tracked by the projectile is the target of the projectile. Otherwise, it will trace the firer, and at the same time, the projectile will detonate if the firer dies.Trajectory.Tracing.TraceTheTarget控制抛射体追踪的目标是否为抛射体的目标,否则为追踪发射者,同时当发射者死亡时抛射体也会一同引爆。Trajectory.Tracing.CreateAtTargetcontrols whether the projectile is directly generated at the target position.Trajectory.Tracing.CreateAtTarget控制抛射体是否在目标位置生成。Trajectory.Tracing.StableRotationcontrols whether the projectile will automatically rotate at the same angle interval whenTrajectory.Tracing.TraceModeisRotateCWorRotateCCW.Trajectory.Tracing.StableRotation控制当抛射体的追踪模式为RotateCW或RotateCCW时,是否会减慢旋转速度并自动计算相互之间的夹角。Trajectory.Tracing.CreateCoordcontrols the generate position. Not related toTrajectory.Tracing.TraceMode.Trajectory.Tracing.CreateCoord控制抛射体的生成位置,与Trajectory.Tracing.TraceMode无关。Trajectory.Tracing.AttachCoordcontrols the tracing position on its target, useTrajectory.Tracing.TraceModedetermines the specific location.Trajectory.Tracing.AttachCoord控制抛射体的追踪位置,由Trajectory.Tracing.TraceMode决定具体位置。Trajectory.Tracing.ChasableDistancecontrols the maximum distance between the target's center of the projectile pursuing and the firer's center. When it is a positive number, the distance will not exceed this value. When it is a negative number, if the distance exceeds this value, the projectile will explode. When it is zero, the weapon's range will be used and considered a positive number.Trajectory.Tracing.ChasableDistance控制抛射体追击目标的中心与发射者之间的最大距离。当为正数时,距离不会超过此值。当为负数时,若距离超过此值,将会引爆抛射体。当为零时,使用武器射程并视为正数。
In rulesmd.ini:
Trajectory.Tracing.TraceMode=Connection ; TraceMode value enumeration (Connection|Global|Body|Turret|RotateCW|RotateCCW)
Trajectory.Tracing.TraceTheTarget=true ; boolean
Trajectory.Tracing.CreateAtTarget=false ; boolean
Trajectory.Tracing.StableRotation=false ; boolean
Trajectory.Tracing.CreateCoord=0,0,0 ; integer - Forward,Lateral,Height
Trajectory.Tracing.AttachCoord=0,0,0 ; integer - Forward,Lateral,Height
Trajectory.Tracing.ChasableDistance=0 ; floating point value
Trajectory.Tracing.StableRotationneed to cooperate withTrajectory.CreateCapacityrecords to take effect.Trajectory.Tracing.StableRotation需要Trajectory.CreateCapacity配合进行进行记录才能生效。
Nightly build for this pull request:
- compiled-dll-434c9c984892c8ed8bc7828a86db4f912563e144.zip These artifacts will expire in 90 days and will not be available for download after that time.
This comment is automatic and is meant to allow guests to get latest nightly builds for this pull request without registering. It is updated on every successful build.
Again, I would concern its backward compatibility. Since Straight, Bombard and Parabola are released logic, there might be modders using it already. Requiring them to modify existing codes is one thing, and those released mods and maps might even not have the chance to modify. I think the 'interface protocol', which means tags in the context of Phobos, should still be compatible when modifying existing functions
For trajectory, we can simply allow these existing 3 projectiles to read previous tags and overwrite the new variables. For example, if Trajectory.Straight.LeadTimeCalculate is already set for a straight trajectory, it should be used to overwrite Trajectory.LeadTimeCalculate. This would be an easy adjustment as we only need to add a few more ini parsing lines
e.g. in StraightTrajectory.cpp
this->LeadTimeCalculate.Read(exINI, pSection, "Trajectory.Straight.LeadTimeCalculate");
I don't think we need to worry about backwards compatibility with this. Like, are there really that many mods that released between changes to Straight and now that aren't developed anymore? And if they aren't developed, people should not switch to a newer Phobos.dll in the first place!
Everyone else can just update their code to fit the new logic. Just remember to note it in the What's New section (and i guess in the Migration Ulitity? not sure how that one even works, i never used it tbh).
For most renames Migration Utility exists and is a valid option. It searches and replaces en masse using regex. Basically it's automated search and replace tool.
As such any simple tag renames should be put into the migration tool.
This PR is pretty much aiming to remove the sort of redundancy that having same value be parsed from multiple keys would add back so that's just not a good idea.
Breaking backwards compatibility is never ideal but it is acceptable in some cases with appropriate migration notice and additions to migration scripts. There will be people who are confused by the changes regardless, whether because they do not read the migration notices or something else, but this one corrects an issue that has potential to snowball into something bigger if even more trajectory types are added in future. In future any new additions that cover or have potential to apply to multiple trajectory types should follow same precedent.
Perhaps compatibility issues could be addressed through the key-value pair reading process, similar to how Ares' Ripple.Radius and IonCannon.Ripple handle it.
Perhaps compatibility issues could be addressed through the key-value pair reading process, similar to how Ares'
Ripple.RadiusandIonCannon.Ripplehandle it.
Why won't migration tool work?
Why won't migration tool work?
I am considering the situation described by Starkku.
There will be people who are confused by the changes regardless, whether because they do not read the migration notices or something else
Perhaps compatibility issues could be addressed through the key-value pair reading process, similar to how Ares'
Ripple.RadiusandIonCannon.Ripplehandle it.
However, this effectively reduces the workload for users to perform batch text modifications as well as the need to train users in PowerShell scripting.
I am considering the situation described by Starkku.
There will be people who are confused by the changes regardless, whether because they do not read the migration notices or something else
I think the point was that there will be people like that no matter what you do, so there's no point in inventing something like that and the situation is fine.
there will be people like that no matter what you do
Well, you're right. :P
I mainly integrated functions that can be generalized and also created some new universal functions. Meanwhile, I used inheritance relationships to distinguish between two major categories of trajectories, they also have their own relatively independent functional differences. I have added a large number of comments and also updated the sample for creating new type in the future. But since I don't have my own mod, I'm not quite sure how to present vivid GIFs in the doc in the most appropriate way. This is quite frustrating.
Regarding the key names, I also thought that there would be no need to add an extra paragraph for the parts that can be shared. A short name indicates its universality while avoiding overly lengthy names.
Actually, I have received some feedback that told me that when the trajectory type increases, the key names become quite lengthy, seems unnecessary because they only change in the middle.
At present, there are only three types that have been merged, and they were all just done in the previous version. I think it is not so complicated even manually replacing them with regular expressions like (Trajectory)(\.).+\.(Proximity.+=) -> $1$2$3.
If going through something, Trajectory=Engrave ends prematurely once it reaches a building behind that object. This happens with default value of Trajectory.ThroughBuilding. Try attacking two 1x1 buildings standing next to eachother, you'll see the problem.
Also, do Trajectory.ProximityImpact= settings even work for Trajectory=Engrave? I cannot make it to work with the same settings that work for a Trajectory=Straight projectile. Only the target attacked takes damage and gets the warhead detonation.
If going through something, Trajectory=Engrave ends prematurely once it reaches a building behind that object. This happens with default value of Trajectory.ThroughBuilding. Try attacking two 1x1 buildings standing next to eachother, you'll see the problem.
I replaced the nightly build here, but I didn't find the above problem either. Is it because the building has less health and you have also set Trajectory.AllowFirerTurning=no. And the attack was interrupted due to the turning of the unit turret?
Also, do Trajectory.ProximityImpact= settings even work for Trajectory=Engrave? I cannot make it to work with the same settings that work for a Trajectory=Straight projectile. Only the target attacked takes damage and gets the warhead detonation.
Thank you for pointing out that it was my negligence that the last valid opportunity of Trajectory.ProximityImpact only interrupt the attack and not cause damage when Trajectory.ProximityWarhead is not set and Trajectory.ProximityImpact is a positive number. I will fix it later.
I replaced the nightly build here, but I didn't find the above problem either. Is it because the building has less health and you have also set
Trajectory.AllowFirerTurning=no. And the attack was interrupted due to the turning of the unit turret?
It's not about turning, but about firing in a straight line. It stops at the building behind the first one.
Trajectory.Engrave.SourceCoord=-8,0
Trajectory.Engrave.TargetCoord=64,0
Trajectory.Duration=10
With this place two 1x1 buildings so one is behind the first, and fire at the first. The beam will stop at the second building, no matter how much further it is supposed to go.
And not sure if this also happened in earlier builds, but with the newest build the beam stops even if i fire at an empty cell in front of the building. Yet if i attack that building itself, the beam goes through normally.
It's not about turning, but about firing in a straight line. It stops at the building behind the first one.
Trajectory.Engrave.SourceCoord=-8,0 Trajectory.Engrave.TargetCoord=64,0 Trajectory.Duration=10With this place two 1x1 buildings so one is behind the first, and fire at the first. The beam will stop at the second building, no matter how much further it is supposed to go.
And not sure if this also happened in earlier builds, but with the newest build the beam stops even if i fire at an empty cell in front of the building. Yet if i attack that building itself, the beam goes through normally.
Can you provide the complete projectile ini? I seem unable to reproduce the issue you mentioned.
Ignore it. I just noticed that the projectile inherits SubjectToBuildings=yes, and that's why this happens.
Just a thought regarding the above issue, but i realized that it would be still useful to have SubjectToBuildings=yes on the Engrave projectile, because it forces units to move around structures to be able to fire at targets behind.
Perhaps Engrave could get an extra tag to ignore SubjectToBuildings=yes settings once the projectile gets fired, so the beam won't end prematurely?
Otherwise, it needs to be noted in the documentation that Engrave should not be used on projectiles with SubjectToBuildings=yes.
Trajectory=Straight projectiles with Trajectory.ProximityImpact= do not detonate their warhead properly when they reach their target cell (or maximum Trajectory.Straight.DetonationDistance= if they have Trajectory.Straight.PassThrough=yes). They detonate only when they hit an actual target, and the warhead seems to be detonated on the target instead of on the point that the projectile reached.
The old implementation used to detonate the warhead properly on the projectile's life end, whether it was on impact or on reaching maximum distance.
Also Trajectory.ProximityImpact= does work properly for Trajectory=Engrave projectiles now, but i think i might have tested it improperly before. I hope i didn't cause any unnecessary fixes to be made. :P
Trajectory=Straight projectiles with Trajectory.ProximityImpact= do not detonate their warhead properly when they reach their target cell (or maximum Trajectory.Straight.DetonationDistance= if they have Trajectory.Straight.PassThrough=yes). They detonate only when they hit an actual target, and the warhead seems to be detonated on the target instead of on the point that the projectile reached.
The old implementation used to detonate the warhead properly on the projectile's life end, whether it was on impact or on reaching maximum distance.
This should be the result of Trajectory.PeacefulVanish's default value being automatically set.
This should be the result of
Trajectory.PeacefulVanish's default value being automatically set.
Yes, it was that.
I've read the note in the doc, and i think i need to clarify further the issue with SubjectToBuildings=yes, because the projectile was being blocked by a building despite having Trajectory.ThroughBuilding=yes.
This is the actual ingame behavior of the beam/projectile:
SubjectToBuildings=no and Trajectory.ThroughVehicles=no
the beam is stopped if fired at the vehicle, yet it can pass through vehicles normally if not fired at them directly
SubjectToBuildings=no Trajectory.ThroughBuilding=no
the beam is stopped if fired at the building, yet it can pass through buildings normally if not fired at them directly
SubjectToBuildings=no and Trajectory.ThroughBuilding=yes
the beam passes through all buildings properly
SubjectToBuildings=yes and Trajectory.ThroughBuilding=yes
the beam passes through the building properly if fired directly at it and there is nothing else on the path, but if there is something behind or it gets fired at a cell before the building, it gets stopped
Is this how Trajectory.ThroughVehicles= and Trajectory.ThroughBuilding= are supposed to work? And should the interaction with SubjectToBuildings=yes be ignored, or is this something unintended?
Is this how Trajectory.ThroughVehicles= and Trajectory.ThroughBuilding= are supposed to work? And should the interaction with SubjectToBuildings=yes be ignored, or is this something unintended?
Ah, I did forget to mention the situation of friendly forces. I'll add it right away.
Is this how Trajectory.ThroughVehicles= and Trajectory.ThroughBuilding= are supposed to work? And should the interaction with SubjectToBuildings=yes be ignored, or is this something unintended?
Ares' SubjectToBuildings did indeed handle the situation of the main target separately, and in this case, it would not stop the projectile. Trajectory.ThroughVehicles and Trajectory.ThroughBuilding does not consider special treatment of the main target, nor does it consider solid hardness, and only judges whether it is friendly. These two are not in conflict, so the actions shown in the picture are all correct.
-
Trajectory.RetargetInterval= is only mentioned under Trajectory.RetargetRadius='s entry, but isn't shown anywhere else in the documentation. What are its defaults?
-
Trajectory.Parabola.ThrowHeight= mentions modes 1, 3 and 4. Is that 0 based? (as i assume it means Height, SpeedAndHeight and HeightAndAngle) Same question for Trajectory.Parabola.LaunchAngle=. I think that actual mode names should be used instead of numbers to avoid confusion (unless Trajectory.Parabola.OpenFireMode= would mentions the number for each mode).
- Trajectory.RetargetInterval= is only mentioned under Trajectory.RetargetRadius='s entry, but isn't shown anywhere else in the documentation. What are its defaults?
- Trajectory.Parabola.ThrowHeight= mentions modes 1, 3 and 4. Is that 0 based? (as i assume it means Height, SpeedAndHeight and HeightAndAngle) Same question for Trajectory.Parabola.LaunchAngle=. I think that actual mode names should be used instead of numbers to avoid confusion (unless Trajectory.Parabola.OpenFireMode= would mentions the number for each mode).
Get it. I'll make some corrections.
Didn't notice it before, but this line should be changed too:
In Trajectory=Parabola, it refers to the horizontal velocity of the projectile and is only used for modes 0, 3, or 5.
Didn't notice it before, but this line should be changed too:
In Trajectory=Parabola, it refers to the horizontal velocity of the projectile and is only used for modes 0, 3, or 5.
Thank you for pointing it out.
If the primary target of Trajectory=Missile is killed and the projectile tries to retarget, it can acquire a friendly object that is nearby. I think there needs to be a way to specify which houses are eligible for retargeting (even a tag similar to Trajectory.ProximityAllies=yes/no will suffice).
is it possible to add additional feature to Inaccurate/scatter against diffrent technotype example : Generals Rocketbuggies, rocket has scatter against Infantry, Tiberian dawn tank, and.. GDI Orca ?
maybe something like Trajectory.ScatterAgainst=Infantry,Building
If the primary target of Trajectory=Missile is killed and the projectile tries to retarget, it can acquire a friendly object that is nearby. I think there needs to be a way to specify which houses are eligible for retargeting (even a tag similar to Trajectory.ProximityAllies=yes/no will suffice).
Actually, it will follow CanTargetHouses . However, perhaps it should be defined separately. Thank you for your feedback.