Phobos
Phobos copied to clipboard
Forcing specific weapon by target type
This is a supplement for https://github.com/Phobos-developers/Phobos/pull/1630. With multiple weapons being set, you can use ForceWeapon to enable them when attacking different targets. This pull request is a basic one that should be enough for many cases
- A series of tags can force specified weapons based on the target's type.
ForceWeapon.Navalforces specified weapon to be used againstNaval=yestargets. Taking priority to other target type-based forced weapons.- If
ForceWeapon.Defensesis enabled, it'll be used if the target is a building withIsBaseDefense=yes. Otherwise it'll followForceWeapon.Buildings, if enabled. ForceWeapon.Infantry/Units/Aircraftcan be applied to both ground and air target ifForceAAWeapon.Infantry/Units/Aircraftis not set.ForceAAWeapon.Infantry/Units/Aircraftdo the same things but only for air target. Taking priority toForceWeapon.Infantry/Units/Aircraft, which means that they can only be applied to ground target when they're both set.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
ForceWeapon.Naval=-1 ; integer, -1 to disable
ForceWeapon.Buildings=-1 ; integer, -1 to disable
ForceWeapon.Defenses=-1 ; integer, -1 to disable
ForceWeapon.Infantry=-1 ; integer, -1 to disable
ForceWeapon.Units=-1 ; integer, -1 to disable
ForceWeapon.Aircraft=-1 ; integer, -1 to disable
ForceAAWeapon.Infantry=-1 ; integer, -1 to disable
ForceAAWeapon.Units=-1 ; integer, -1 to disable
ForceAAWeapon.Aircraft=-1 ; integer, -1 to disable
Nightly build for this pull request:
- compiled-dll-dbf5f05cd17bfd4cd421053b8ea376a34acb8ae7.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.
besides, if you're certain that weapons of a techno won't make use of the following things, you can use this ability to make it skip previous weapon index picking logic, to save some calculation cost
- CanTarget
- CanTargetHouse
- AttachEffect.RequiredTypes/Groups
- AttachEffect.DisallowedTypes/Groups
- Land/NavalTargeting
a similar optimization was also made in https://github.com/Phobos-developers/Phobos/pull/1568
I think after updating it, we can merge this.
By the way, my opinion on
ForceWeapon.Navalis probably like this, what do you think?case AbstractType::Unit: { forceWeaponIndex = (this->ForceAAWeapon_Units >= 0 && pTarget->IsInAir()) ? this->ForceAAWeapon_Units : ((this->ForceWeapon_Naval >= 0 && pTargetType->Naval) ? this->ForceWeapon_Naval : this->ForceWeapon_Units); break; }
Naval=yes can not only be applied to unit, but also other type of techno. If we're changing it to this way I'm afraid it might be somehow misleading
Naval=yescan not only be applied to unit, but also other type of techno. If we're changing it to this way I'm afraid it might be somehow misleading
In this case, I think it's necessary to further distinguish between vehicles and buildings that Naval=yes.
I think after updating it, we can merge this. By the way, my opinion on
ForceWeapon.Navalis probably like this, what do you think?case AbstractType::Unit: { forceWeaponIndex = (this->ForceAAWeapon_Units >= 0 && pTarget->IsInAir()) ? this->ForceAAWeapon_Units : ((this->ForceWeapon_Naval >= 0 && pTargetType->Naval) ? this->ForceWeapon_Naval : this->ForceWeapon_Units); break; }
Naval=yescan not only be applied to unit, but also other type of techno. If we're changing it to this way I'm afraid it might be somehow misleading
Since when is allowed in the code style of this project the concatenated inlined if? (I dont know if inlined is the right word in English for the "condition ? value1 : value2" )