More moves, allow for typeless moves

This commit is contained in:
2025-05-02 15:46:37 +02:00
parent 807acf1947
commit 068ff8d5b7
33 changed files with 525 additions and 56 deletions

View File

@@ -346,7 +346,7 @@ public interface IPokemon : IScriptSource, IDeepCloneable
/// <summary>
/// Adds a non-volatile status to the Pokemon.
/// </summary>
void SetStatus(StringKey status);
bool SetStatus(StringKey status);
/// <summary>
/// Removes the current non-volatile status from the Pokemon.
@@ -447,7 +447,7 @@ public interface IPokemonBattleData : IDeepCloneable
/// <summary>
/// Marks an item as consumed.
/// </summary>
void MarkItemAsConsumed(IItem itemName);
void MarkItemAsConsumed(IItem item);
uint SwitchInTurn { get; internal set; }
@@ -780,6 +780,7 @@ public class PokemonImpl : ScriptSource, IPokemon
this.RunScriptHook(script => script.PreventHeldItemConsume(this, HeldItem, ref prevented));
if (prevented)
return false;
BattleData.MarkItemAsConsumed(HeldItem);
}
// TODO: actually consume the item
@@ -1007,6 +1008,7 @@ public class PokemonImpl : ScriptSource, IPokemon
{
BattleData.Battle.Sides[BattleData.SideIndex].MarkPositionAsUnfillable(BattleData.Position);
}
BattleData.BattleSide.MarkFaint(BattleData.Position);
// Validate the battle state to see if the battle is over.
BattleData.Battle.ValidateBattleState();
@@ -1078,11 +1080,12 @@ public class PokemonImpl : ScriptSource, IPokemon
public bool HasStatus(StringKey status) => StatusScript.Script?.Name == status;
/// <inheritdoc />
public void SetStatus(StringKey status)
public bool SetStatus(StringKey status)
{
if (!Library.ScriptResolver.TryResolve(ScriptCategory.Status, status, null, out var statusScript))
throw new KeyNotFoundException($"Status script {status} not found");
StatusScript.Set(statusScript);
return true;
}
/// <inheritdoc />
@@ -1255,9 +1258,10 @@ public class PokemonBattleDataImpl : IPokemonBattleData
public IReadOnlyList<IItem> ConsumedItems => _consumedItems;
/// <inheritdoc />
public void MarkItemAsConsumed(IItem itemName)
public void MarkItemAsConsumed(IItem item)
{
_consumedItems.Add(itemName);
_consumedItems.Add(item);
BattleSide.SetConsumedItem(Position, item);
}
/// <inheritdoc />