From 3c8bcba6b540f5cb84572994d9ec2426dd348a93 Mon Sep 17 00:00:00 2001 From: fusion32 Date: Thu, 5 Jun 2025 02:00:10 -0300 Subject: finish `magic.cc` --- src/magic.hh | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 107 insertions(+), 19 deletions(-) (limited to 'src/magic.hh') diff --git a/src/magic.hh b/src/magic.hh index 0525ad2..e1dc354 100644 --- a/src/magic.hh +++ b/src/magic.hh @@ -4,6 +4,14 @@ #include "common.hh" #include "creature.hh" +enum : int { + FIELD_TYPE_FIRE = 1, + FIELD_TYPE_POISON = 2, + FIELD_TYPE_ENERGY = 3, + FIELD_TYPE_MAGICWALL = 4, + FIELD_TYPE_WILDGROWTH = 5, +}; + struct TImpact{ // VIRTUAL FUNCTIONS // ========================================================================= @@ -89,25 +97,105 @@ struct TSummonImpact: TImpact { int Maximum; }; -struct TCircle { - int x[32]; - int y[32]; - int Count; -}; - -struct TSpellList { - uint8 Syllable[10]; - uint8 RuneGr; - uint8 RuneNr; - const char *Comment; - uint16 Level; - uint16 RuneLevel; - uint16 Flags; - int Mana; - int SoulPoints; - int Amount; -}; +void ActorShapeSpell(TCreature *Actor, TImpact *Impact, int Effect); +void VictimShapeSpell(TCreature *Actor, TCreature *Victim, + int Range, int Animation, TImpact *Impact, int Effect); +void OriginShapeSpell(TCreature *Actor, int Radius, TImpact *Impact, int Effect); +void CircleShapeSpell(TCreature *Actor, int DestX, int DestY, int DestZ, + int Range, int Animation, int Radius, TImpact *Impact, int Effect); +void DestinationShapeSpell(TCreature *Actor, TCreature *Victim, + int Range, int Animation, int Radius, TImpact *Impact, int Effect); +void AngleShapeSpell(TCreature *Actor, int Angle, int Range, TImpact *Impact, int Effect); +void CheckSpellbook(TCreature *Actor, int SpellNr); +void CheckAccount(TCreature *Actor, int SpellNr); +void CheckLevel(TCreature *Actor, int SpellNr); +void CheckRuneLevel(TCreature *Actor, int SpellNr); +void CheckMagicItem(TCreature *Actor, ObjectType Type); +void CheckRing(TCreature *Actor, int SpellNr); +void CheckAffectedPlayers(TCreature *Actor, int x, int y, int z); +void CheckMana(TCreature *Actor, int ManaPoints, int SoulPoints, int Delay); +int ComputeDamage(TCreature *Actor, int SpellNr, int Damage, int Variation); +bool IsAggressiveSpell(int SpellNr); +void MassCombat(TCreature *Actor, Object Target, int ManaPoints, int SoulPoints, + int Damage, int Effect, int Radius, int DamageType, int Animation); +void AngleCombat(TCreature *Actor, int ManaPoints, int SoulPoints, + int Damage, int Effect, int Range, int Angle, int DamageType); +void Combat(TCreature *Actor, Object Target, int ManaPoints, int SoulPoints, + int Damage, int Effect, int Animation, int DamageType); +int GetDirection(int dx, int dy); // TODO(fusion): Move this one elsewhere? Maybe `info.cc`. +void KillAllMonsters(TCreature *Actor, int Effect, int Radius); +void CreateField(int x, int y, int z, int FieldType, uint32 Owner, bool Peaceful); +void CreateField(TCreature *Actor, Object Target, int ManaPoints, int SoulPoints, int FieldType); +void CreateField(TCreature *Actor, int ManaPoints, int SoulPoints, int FieldType); +void MassCreateField(TCreature *Actor, Object Target, + int ManaPoints, int SoulPoints, int FieldType, int Radius); +void CreateFieldWall(TCreature *Actor, Object Target, + int ManaPoints, int SoulPoints, int FieldType, int Width); +void DeleteField(TCreature *Actor, Object Target, int ManaPoints, int SoulPoints); +void CleanupField(TCreature *Actor, Object Target, int ManaPoints, int SoulPoints); +void CleanupField(TCreature *Actor); +void Teleport(TCreature *Actor, const char *Param); +void TeleportToCreature(TCreature *Actor, const char *Name); +void TeleportPlayerToMe(TCreature *Actor, const char *Name); +void MagicRope(TCreature *Actor, int ManaPoints, int SoulPoints); +void MagicClimbing(TCreature *Actor, int ManaPoints, int SoulPoints, const char *Param); +void MagicClimbing(TCreature *Actor, const char *Param); +void CreateThing(TCreature *Actor, const char *Param1, const char *Param2); +void CreateMoney(TCreature *Actor, const char *Param); +void CreateFood(TCreature *Actor, int ManaPoints, int SoulPoints); +void CreateArrows(TCreature *Actor, int ManaPoints, int SoulPoints, int ArrowType, int Count); +void SummonCreature(TCreature *Actor, int ManaPoints, int Race, bool God); +void SummonCreature(TCreature *Actor, int ManaPoints, const char *RaceName, bool God); +void StartMonsterraid(TCreature *Actor, const char *RaidName); +void RaiseDead(TCreature *Actor, Object Target, int ManaPoints, int SoulPoints); +void MassRaiseDead(TCreature *Actor, Object Target, int ManaPoints, int SoulPoints, int Radius); +void Heal(TCreature *Actor, int ManaPoints, int SoulPoints, int Amount); +void MassHeal(TCreature *Actor, Object Target, int ManaPoints, int SoulPoints, int Amount, int Radius); +void HealFriend(TCreature *Actor, const char *TargetName, int ManaPoints, int SoulPoints, int Amount); +void RefreshMana(TCreature *Actor, int ManaPoints, int SoulPoints, int Amount); +void MagicGoStrength(TCreature *Actor, TCreature *Target, int ManaPoints, int SoulPoints, int Percent, int Duration); +void Shielding(TCreature *Actor, int ManaPoints, int SoulPoints, int Duration); +void NegatePoison(TCreature *Actor, TCreature *Target, int ManaPoints, int SoulPoints); +void Enlight(TCreature *Actor, int ManaPoints, int SoulPoints, int Radius, int Duration); +void Invisibility(TCreature *Actor, int ManaPoints, int SoulPoints, int Duration); +void CancelInvisibility(TCreature *Actor, Object Target, int ManaPoints, int SoulPoints, int Radius); +void CreatureIllusion(TCreature *Actor, int ManaPoints, int SoulPoints, const char *RaceName, int Duration); +void ObjectIllusion(TCreature *Actor, int ManaPoints, int SoulPoints, Object Target, int Duration); +void ChangeData(TCreature *Actor, const char *Param); +void EnchantObject(TCreature *Actor, int ManaPoints, int SoulPoints, ObjectType OldType, ObjectType NewType); +void Convince(TCreature *Actor, TCreature *Target); +void Challenge(TCreature *Actor, int ManaPoints, int SoulPoints, int Radius); +void FindPerson(TCreature *Actor, int ManaPoints, int SoulPoints, const char *TargetName); +void GetPosition(TCreature *Actor); +void GetQuestValue(TCreature *Actor, const char *Param); +void SetQuestValue(TCreature *Actor, const char *Param1, const char *Param2); +void ClearQuestValues(TCreature *Actor); +void CreateKnowledge(TCreature *Actor, const char *Param1, const char *Param2); +void ChangeProfession(TCreature *Actor, const char *Param); +void EditGuests(TCreature *Actor); +void EditSubowners(TCreature *Actor); +void EditNameDoor(TCreature *Actor); +void KickGuest(TCreature *Actor, const char *GuestName); +void Notation(TCreature *Actor, const char *Name, const char *Comment); +void NameLock(TCreature *Actor, const char *Name); +void BanishAccount(TCreature *Actor, const char *Name, int Duration, const char *Reason); +void DeleteAccount(TCreature *Actor, const char *Name, const char *Reason); +void BanishCharacter(TCreature *Actor, const char *Name, int Duration, const char *Reason); +void DeleteCharacter(TCreature *Actor, const char *Name, const char *Reason); +void IPBanishment(TCreature *Actor, const char *Name, const char *Reason); +void SetNameRule(TCreature *Actor, const char *Name); +void KickPlayer(TCreature *Actor, const char *Name); +void HomeTeleport(TCreature *Actor, const char *Name); + +// TODO(fusion): These are unsafe like strcpy. +void GetMagicItemDescription(Object Obj, char *SpellString, int *MagicLevel); +void GetSpellbook(uint32 CharacterID, char *Buffer); + +int GetSpellLevel(int SpellNr); + +int CheckForSpell(uint32 CreatureID, const char *Text); +void UseMagicItem(uint32 CreatureID, Object Obj, Object Dest); +void DrinkPotion(uint32 CreatureID, Object Obj); -void CheckMana(TCreature *Creature, int ManaPoints, int SoulPoints, int Delay); #endif //TIBIA_MAGIC_HH_ -- cgit v1.2.3