}
/// <summary>
- /// Polymorphs the target entity into another
+ /// Polymorphs the target entity into another.
/// </summary>
/// <param name="uid">The entity that will be transformed</param>
- /// <param name="configuration">Polymorph data</param>
- /// <returns></returns>
+ /// <param name="configuration">The new polymorph configuration</param>
+ /// <returns>The new entity, or null if the polymorph failed.</returns>
public EntityUid? PolymorphEntity(EntityUid uid, PolymorphConfiguration configuration)
{
- // if it's already morphed, don't allow it again with this condition active.
- if (!configuration.AllowRepeatedMorphs && HasComp<PolymorphedEntityComponent>(uid))
+ // If they're morphed, check their current config to see if they can be
+ // morphed again
+ if (!configuration.IgnoreAllowRepeatedMorphs
+ && TryComp<PolymorphedEntityComponent>(uid, out var currentPoly)
+ && !currentPoly.Configuration.AllowRepeatedMorphs)
return null;
// If this polymorph has a cooldown, check if that amount of time has passed since the
public bool RevertOnEat;
/// <summary>
- /// Whether or not an already polymorphed entity is able to be polymorphed again
+ /// If true, attempts to polymorph this polymorph will fail, unless
+ /// <see cref="IgnoreAllowRepeatedMorphs"/> is true on the /new/ morph.
/// </summary>
[DataField(serverOnly: true)]
public bool AllowRepeatedMorphs;
+ /// <summary>
+ /// If true, this morph will succeed even when used on an entity
+ /// that is already polymorphed with a configuration that has
+ /// <see cref="AllowRepeatedMorphs"/> set to false. Helpful for
+ /// smite polymorphs which should always succeed.
+ /// </summary>
+ [DataField(serverOnly: true)]
+ public bool IgnoreAllowRepeatedMorphs;
+
/// <summary>
/// The amount of time that should pass after this polymorph has ended, before a new one
/// can occur.
transferName: true
transferHumanoidAppearance: true
inventory: Transfer
- allowRepeatedMorphs: true
+ ignoreAllowRepeatedMorphs: true
- type: polymorph
id: AdminMonkeySmite
entity: MobMonkey
forced: true
inventory: Drop
- allowRepeatedMorphs: true
+ ignoreAllowRepeatedMorphs: true
- type: polymorph
id: AdminBreadSmite
entity: FoodBreadPlain
forced: true
inventory: Drop
- allowRepeatedMorphs: true
+ ignoreAllowRepeatedMorphs: true
- type: polymorph
id: AdminInstrumentSmite
entity: SuperSynthesizerInstrument
forced: true
inventory: Drop
- allowRepeatedMorphs: true
+ ignoreAllowRepeatedMorphs: true
- type: polymorph
id: AdminMouseSmite
entity: MobMouse
forced: true
inventory: Drop
- allowRepeatedMorphs: true
+ ignoreAllowRepeatedMorphs: true
- type: polymorph
id: AdminDisposalsSmite
entity: DisposalUnit
forced: true
inventory: Drop
- allowRepeatedMorphs: true
+ ignoreAllowRepeatedMorphs: true