Implements core interfaces for better language server compiles.

This commit is contained in:
Deukhoofd 2020-09-19 17:44:06 +02:00
parent 5650fd004c
commit d3262e924d
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
38 changed files with 292 additions and 70 deletions

View File

@ -0,0 +1,5 @@
shared interface BaseTurnChoice {
TurnChoiceKind Kind { get const; }
Pokemon@ User { get const; }
MoveTurnChoice@ opCast();
}

View File

@ -0,0 +1,12 @@
shared interface Battle {
const BattleLibrary@ Library { get const; }
bool CanUse(BaseTurnChoice@ choice);
bool CanFlee { get const; }
BattleRandom@ Random { get const; }
ChoiceQueue@ TurnQueue { get const; }
void AddVolatile(const constString &in name) const;
void RemoveVolatile(const constString &in name) const;
void SetWeather(const constString &in name) const;
void ClearWeather(const constString &in name) const;
const constString& GetWeatherName() const;
}

View File

@ -0,0 +1,7 @@
shared enum BattleItemCategory {
None = 0,
Healing = 1,
StatusHealing = 2,
CaptureDevice = 3,
Misc = 4,
}

View File

@ -0,0 +1,8 @@
shared interface BattleLibrary {
const LibrarySettings@ Settings { get const; }
const StaticLibrary@ StaticLibrary { get const; }
const SpeciesLibrary@ SpeciesLibrary { get const; }
const MoveLibrary@ MoveLibrary { get const; }
const ItemLibrary@ ItemLibrary { get const; }
const DamageLibrary@ DamageLibrary { get const; }
}

View File

@ -0,0 +1,6 @@
shared interface BattleRandom {
bool EffectChance(float chance, ExecutingMove@ move, Pokemon@ target);
int Get();
int Get(int max);
int Get(int min, int max);
}

View File

@ -0,0 +1,4 @@
shared interface ChoiceQueue {
bool MovePokemonChoiceNext(Pokemon@ target);
const BaseTurnChoice@ Peek() const;
}

View File

@ -0,0 +1,3 @@
shared interface DamageLibrary {
int GetDamage() const;
}

View File

@ -0,0 +1,4 @@
shared enum DamageSource {
AttackDamage = 0,
Struggle = 1,
}

View File

@ -0,0 +1,7 @@
shared interface EffectParameter {
EffectParameterType GetType() const;
bool AsBool() const;
int64 AsInt() const;
float AsFloat() const;
const constString& AsString() const;
}

View File

@ -0,0 +1,7 @@
shared enum EffectParameterType {
None = 0,
Bool = 1,
Int = 2,
Float = 3,
String = 4,
}

View File

@ -0,0 +1,6 @@
shared interface ExecutingMove {
HitData@ GetHitData(Pokemon@ target, uint8 hit) const;
bool IsPokemonTarget(Pokemon@ pkmn) const;
Pokemon@ User { get const; }
LearnedMove@ Move { get const; }
}

View File

@ -0,0 +1,10 @@
shared interface Forme {
const constString& Name { get const; }
float Weight { get const; }
float Height { get const; }
uint BaseExperience { get const; }
int TypeCount { get const; }
uint8 GetType(int index) const;
uint GetStatistic(Statistic stat) const;
const constString& GetAbility(bool hidden, uint8 index) const;
}

View File

@ -0,0 +1,5 @@
shared enum Gender {
Male = 0,
Female = 1,
Genderless = 2,
}

View File

@ -0,0 +1,4 @@
shared interface GrowthRate {
uint8 CalculateLevel(uint experience) const;
uint CalculateExperience(uint8 level) const;
}

View File

@ -0,0 +1,4 @@
shared interface GrowthRateLibrary {
uint8 CalculateLevel(const constString &in growthRate, uint experience) const;
uint CalculateExperience(const constString &in growthRate, uint8 experience) const;
}

View File

@ -0,0 +1,7 @@
shared interface HitData {
bool IsCritical { get const; }
uint8 BasePower { get const; }
float Effectiveness { get const; }
uint Damage { get const; }
uint8 Type { get const; }
}

View File

@ -0,0 +1,7 @@
shared interface Item {
const constString& Name { get const; }
ItemCategory Category { get const; }
BattleItemCategory BattleCategory { get const; }
int Price { get const; }
bool HasFlag(const constString &in flag) const;
}

View File

@ -0,0 +1,10 @@
shared enum ItemCategory {
Misc = 0,
Pokeball = 1,
Medicine = 2,
Berry = 3,
TM = 4,
VariantChanger = 5,
KeyItem = 6,
Mail = 7,
}

View File

@ -0,0 +1,3 @@
shared interface ItemLibrary {
const Item@ Get(const constString &in name) const;
}

View File

@ -0,0 +1,6 @@
shared interface LearnedMove {
const MoveData@ MoveData { get const; }
uint8 MaxUses { get const; }
uint8 RemainingUses { get const; }
Gender LearnMethod { get const; }
}

View File

@ -0,0 +1,5 @@
shared interface LibrarySettings {
uint8 MaximalLevel { get const; }
uint8 MaximalMoves { get const; }
uint16 ShinyRate { get const; }
}

View File

@ -0,0 +1,5 @@
shared enum MoveCategory {
Physical = 0,
Special = 1,
Status = 2,
}

View File

@ -0,0 +1,11 @@
shared interface MoveData {
const constString& Name { get const; }
uint8 Type { get const; }
MoveCategory Category { get const; }
uint8 BasePower { get const; }
uint8 Accuracy { get const; }
uint8 BaseUsages { get const; }
MoveTarget Target { get const; }
int8 Priority { get const; }
bool HasFlag(const constString &in flag) const;
}

View File

@ -0,0 +1,4 @@
shared enum MoveLearnMethod {
Unknown = 0,
Level = 1,
}

View File

@ -0,0 +1,3 @@
shared interface MoveLibrary {
const MoveData@ Get(const constString &in name) const;
}

View File

@ -0,0 +1,14 @@
shared enum MoveTarget {
Adjacent = 0,
AdjacentAlly = 1,
AdjacentAllySelf = 2,
AdjacentOpponent = 3,
All = 4,
AllAdjacent = 5,
AllAdjacentOpponent = 6,
AllAlly = 7,
AllOpponent = 8,
Any = 9,
RandomOpponent = 10,
Self = 11,
}

View File

@ -0,0 +1,7 @@
shared interface MoveTurnChoice {
TurnChoiceKind Kind { get const; }
Pokemon@ User { get const; }
LearnedMove@ Move { get const; }
int8 Priority { get const; }
BaseTurnChoice@ opImplCast();
}

View File

@ -1,32 +1,34 @@
shared abstract class PkmnScript { shared abstract class PkmnScript {
// CreatureLib methods void OnInitialize(const EffectParameter@[] &in){};
void OnInitialize(const array<EffectParameter@> &in parameters){}; void Stack(){};
void Stack(){}; void OnRemove(){};
void OnRemove(){}; void OnBeforeTurn(BaseTurnChoice@){};
void PreventAttack(ExecutingMove@ attack, bool& result){}; void ChangeAttack(MoveTurnChoice@, constString &inout){};
void FailAttack(ExecutingMove@ attack, bool& result){}; void PreventAttack(ExecutingMove@, bool &inout){};
void StopBeforeAttack(ExecutingMove@ attack, bool& result){}; void FailAttack(ExecutingMove@, bool &inout){};
void OnBeforeAttack(ExecutingMove@ attack){}; void StopBeforeAttack(ExecutingMove@, bool &inout){};
void FailIncomingAttack(ExecutingMove@ attack, Pokemon@ target, bool& result){}; void OnBeforeAttack(ExecutingMove@){};
void IsInvulnerable(ExecutingMove@ attack, Pokemon@ target, bool& result){}; void FailIncomingAttack(ExecutingMove@, Pokemon@, bool &inout){};
void OnAttackMiss(ExecutingMove@ attack, Pokemon@ target){}; void IsInvulnerable(ExecutingMove@, Pokemon@, bool &inout){};
void ChangeAttackType(ExecutingMove@ attack, Pokemon@ target, uint8 hit, uint8& outType){}; void OnAttackMiss(ExecutingMove@, Pokemon@){};
void OnStatusMove(ExecutingMove@ attack, Pokemon@ target, uint8 hit){}; void ChangeAttackType(ExecutingMove@, Pokemon@, uint8, uint8 &inout){};
void PreventSecondaryEffects(ExecutingMove@ attack, Pokemon@ target, uint8 hit, bool& outResult){}; void ChangeEffectiveness(ExecutingMove@, Pokemon@, uint8, float &inout){};
void OnSecondaryEffect(ExecutingMove@ attack, Pokemon@ target, uint8 hit){}; void PreventSecondaryEffects(ExecutingMove@, Pokemon@, uint8, bool &inout){};
void OnAfterHits(ExecutingMove@ attack, Pokemon@ target){}; void OnSecondaryEffect(ExecutingMove@, Pokemon@, uint8){};
void OnAfterHits(ExecutingMove@, Pokemon@){};
void ModifyEffectChance(ExecutingMove@ attack, Pokemon@ target, float& chance){}; void PreventSelfSwitch(SwitchTurnChoice@, bool &inout){};
void ModifyIncomingEffectChance(ExecutingMove@ attack, Pokemon@ target, float& chance){}; void ModifyEffectChance(ExecutingMove@, Pokemon@, float &inout){};
void ModifyIncomingEffectChance(ExecutingMove@, Pokemon@, float &inout){};
void OverrideBasePower(ExecutingMove@ attack, Pokemon@ target, uint8 hit, uint8& chance){}; void OverrideBasePower(ExecutingMove@, Pokemon@, uint8, uint8 &inout){};
void ChangeDamageStatsUser(ExecutingMove@ attack, Pokemon@ target, uint8 hit, Pokemon@& user){}; void ChangeDamageStatsUser(ExecutingMove@, Pokemon@, uint8, Pokemon@ &inout){};
void BypassDefensiveStat(ExecutingMove@ attack, Pokemon@ target, uint8 hit, bool& bypass){}; void BypassDefensiveStat(ExecutingMove@, Pokemon@, uint8, bool &inout){};
void BypassOffensiveStat(ExecutingMove@ attack, Pokemon@ target, uint8 hit, bool& bypass){}; void BypassOffensiveStat(ExecutingMove@, Pokemon@, uint8, bool &inout){};
void ModifyStatModifier(ExecutingMove@ attack, Pokemon@ target, uint8 hit, float& modifier){}; void ModifyStatModifier(ExecutingMove@, Pokemon@, uint8, float &inout){};
void ModifyDamageModifier(ExecutingMove@ attack, Pokemon@ target, uint8 hit, float& modifier){}; void ModifyDamageModifier(ExecutingMove@, Pokemon@, uint8, float &inout){};
void OverrideDamage(ExecutingMove@ attack, Pokemon@ target, uint8 hit, int& damage){}; void OverrideDamage(ExecutingMove@, Pokemon@, uint8, uint &inout){};
void ModifyCriticalStage(ExecutingMove@, Pokemon@, uint8, uint8 &inout){};
// PkmnLib methods void OverrideCriticalModifier(ExecutingMove@, Pokemon@, uint8, float &inout){};
void ModifyCriticalStage(ExecutingMove@ attack, Pokemon@ target, uint8 hit, uint8& critStage){}; void OverrideSTABModifier(ExecutingMove@, Pokemon@, uint8, float &inout){};
} void ModifyExperienceGain(Pokemon@, Pokemon@, uint &inout){};
void DoesShareExperience(Pokemon@, Pokemon@, bool &inout){};
}

View File

@ -1,38 +1,33 @@
interface Pokemon{ shared interface Pokemon {
const Species@ Species { get const; } const Species@ Species { get const; }
const Forme@ Forme { get const; } const Forme@ Forme { get const; }
const Species@ DisplaySpecies { get const; } uint8 Level { get const; }
const Forme@ DisplayForme { get const; } uint Experience { get const; }
Gender Gender { get const; }
uint8 Level { get const; } uint8 Coloring { get const; }
uint32 Experience { get const; } bool Shiny { get const; }
Gender Gender { get const; } const Item@ HeldItem { get const; }
uint8 Coloring { get const; } bool HasHeldItem(const constString &in name) const;
bool Shiny { get const; } void SetHeldItem(const string &in name);
const Item@ HeldItem { get const; } void SetHeldItem(const Item@ item);
uint32 CurrentHealth{ get const; } uint CurrentHealth { get const; }
const string& Nickname { get const; } const string& Nickname { get const; }
const string& ActiveAbility { get const; } const constString& ActiveAbility { get const; }
bool IsFainted { get const; } bool IsFainted { get const; }
bool HasType(uint8) const; bool HasType(uint8 type) const;
uint32 MaxHealth{ get const; }; uint MaxHealth { get const; }
const Species@ DisplaySpecies { get const; } void Damage(uint type, DamageSource source);
void Heal(uint type);
uint8[]@ GetTypes() const; void OverrideActiveAbility(const string &in ability);
LearnedMove@[]@ GetMoves() const LearnedMove@[]@ GetMoves() const;
void ChangeStatBoost(Statistic stat, int8 amount); void ChangeStatBoost(Statistic stat, int8 amount);
uint32 GetFlatStat(Statistic stat) const; const Species@ DisplaySpecies { get const; }
uint32 GetBoostedStat(Statistic stat) const; const Species@ DisplayForme { get const; }
uint32 GetBaseStat(Statistic stat) const; uint GetFlatStat(Statistic stat) const;
int8 GetStatBoost(Statistic stat) const; uint GetBoostedStat(Statistic stat) const;
uint GetBaseStat(Statistic stat) const;
bool HasHeldItem(const string &in name) const; int8 GetStatBoost(Statistic stat) const;
void AddVolatile(const constString &in name) const;
void Damage(uint32 amount, DamageSource source); void RemoveVolatile(const constString &in name) const;
void Heal(uint32 amount); const Battle@ Battle { get const; }
void OverrideActiveAbility(const string &in ability); }
void SetHeldItem(const string &in name);
void SetHeldItem(const Item@ name);
Battle Battle{ get const; }
}

View File

@ -0,0 +1,9 @@
shared interface Species {
const constString& Name { get const; }
uint16 Id { get const; }
float GenderRate { get const; }
uint8 CaptureRate { get const; }
Gender GetRandomGender() const;
const Forme@ GetForme(string key) const;
const Forme@ DefaultForme { get const; }
}

View File

@ -0,0 +1,3 @@
shared interface SpeciesLibrary {
const Species@ Get(const constString &in name) const;
}

View File

@ -0,0 +1,8 @@
shared interface StaticLibrary {
const LibrarySettings@ Settings { get const; }
const SpeciesLibrary@ SpeciesLibrary { get const; }
const MoveLibrary@ MoveLibrary { get const; }
const ItemLibrary@ ItemLibrary { get const; }
const GrowthRateLibrary@ GrowthRateLibrary { get const; }
const TypeLibrary@ TypeLibrary { get const; }
}

View File

@ -0,0 +1,8 @@
shared enum Statistic {
HP = 0,
Attack = 1,
Defense = 2,
SpecialAttack = 3,
SpecialDefense = 4,
Speed = 5,
}

View File

@ -0,0 +1,7 @@
shared interface SwitchTurnChoice {
TurnChoiceKind Kind { get const; }
Pokemon@ User { get const; }
Pokemon@ NewPokemon { get const; }
MoveTurnChoice@ opCast();
BaseTurnChoice@ opImplCast();
}

View File

@ -0,0 +1,7 @@
shared enum TurnChoiceKind {
Pass = 0,
Attack = 1,
Item = 2,
Switch = 3,
Flee = 4,
}

View File

@ -0,0 +1,4 @@
shared interface TypeLibrary {
uint8 GetTypeId(const constString &in name) const;
float GetSingleEffectiveness(uint8 attacking, uint8 defensive) const;
}

View File

@ -0,0 +1,5 @@
shared interface constString {
bool opEquals(const constString &in) const;
bool opEquals(const string &in) const;
uint opImplConv();
}

View File

@ -3,7 +3,7 @@ namespace Gen7 {
shared class ChangeTargetDefense : PkmnScript{ shared class ChangeTargetDefense : PkmnScript{
int8 _amount; int8 _amount;
void OnInitialize(const array<EffectParameter@> &in parameters) override{ void OnInitialize(const EffectParameter@[] &in parameters) override{
_amount = int8(parameters[0].AsInt()); _amount = int8(parameters[0].AsInt());
} }