You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

57 lines
1.9 KiB

/**
* @file spells.h
*
* Interface of functionality for casting player spells.
*/
#pragma once
#include "player.h"
namespace devilution {
enum class SpellCheckResult : uint8_t {
Success,
Fail_NoMana,
Fail_Level0,
Fail_Busy,
};
bool IsWallSpell(spell_id spl);
bool TargetsMonster(spell_id id);
int GetManaAmount(Player &player, spell_id sn);
void UseMana(int id, spell_id sn);
SpellCheckResult CheckSpell(int id, spell_id sn, spell_type st, bool manaonly);
/**
* @brief Ensures the player's current readied spell is a valid selection for the character. If the current selection is
* incompatible with the player's items and spell (for example, if the player does not currently have access to the spell),
* the selection is cleared.
* @note Will force a UI redraw in case the values actually change, so that the new spell reflects on the bottom panel.
* @param player The player whose readied spell is to be checked.
*/
void EnsureValidReadiedSpell(Player &player);
void CastSpell(int id, spell_id spl, int sx, int sy, int dx, int dy, int spllvl);
/**
* @param pnum player index
* @param rid target player index
*/
void DoResurrect(int pnum, uint16_t rid);
void DoHealOther(const Player &caster, Player &target);
int GetSpellBookLevel(spell_id s);
int GetSpellStaffLevel(spell_id s);
/**
* @brief Gets a value that represents the specified spellID in 64bit bitmask format.
* For example:
* - spell ID 1: 0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0001
* - spell ID 43: 0000.0000.0000.0000.0000.0100.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000
* @param spellId The id of the spell to get a bitmask for.
* @return A 64bit bitmask representation for the specified spell.
*/
constexpr uint64_t GetSpellBitmask(int spellId)
{
return 1ULL << (spellId - 1);
}
} // namespace devilution