diff options
Diffstat (limited to 'src/map/skill.hpp')
-rw-r--r-- | src/map/skill.hpp | 936 |
1 files changed, 91 insertions, 845 deletions
diff --git a/src/map/skill.hpp b/src/map/skill.hpp index 3dea4d3..a724781 100644 --- a/src/map/skill.hpp +++ b/src/map/skill.hpp @@ -1,892 +1,138 @@ -// $Id: skill.h,v 1.5 2004/09/25 05:32:19 MouseJstr Exp $ #ifndef SKILL_HPP #define SKILL_HPP -#include "../common/timer.hpp" +#include "skill.t.hpp" #include "map.hpp" -#include "magic.hpp" -#define MAX_SKILL_DB 450 -#define MAX_SKILL_PRODUCE_DB 150 -#define MAX_SKILL_ARROW_DB 150 -#define MAX_SKILL_ABRA_DB 350 - -#define SKILL_POOL_FLAG 0x1 // is a pool skill -#define SKILL_POOL_ACTIVE 0x2 // is an active pool skill -#define SKILL_POOL_ACTIVATED 0x4 // pool skill has been activated (used for clif) +constexpr int MAX_SKILL_PRODUCE_DB = 150; +constexpr int MAX_SKILL_ARROW_DB = 150; +constexpr int MAX_SKILL_ABRA_DB = 350; // スキルデータベース struct skill_db { - int range[MAX_SKILL_LEVEL], hit, inf, pl, nk, max, stat, poolflags, max_raise; // `max' is the global max, `max_raise' is the maximum attainable via skill-ups - int num[MAX_SKILL_LEVEL]; - int cast[MAX_SKILL_LEVEL], delay[MAX_SKILL_LEVEL]; - int upkeep_time[MAX_SKILL_LEVEL], upkeep_time2[MAX_SKILL_LEVEL]; - int castcancel, cast_def_rate; - int inf2, maxcount, skill_type; - int blewcount[MAX_SKILL_LEVEL]; - int hp[MAX_SKILL_LEVEL], sp[MAX_SKILL_LEVEL], mhp[MAX_SKILL_LEVEL], + int range[MAX_SKILL_LEVEL], hit, inf, pl, nk, max; + SP stat; + SkillFlags poolflags; + int max_raise; // `max' is the global max, `max_raise' is the maximum attainable via skill-ups + int num[MAX_SKILL_LEVEL]; + int cast[MAX_SKILL_LEVEL], delay[MAX_SKILL_LEVEL]; + int upkeep_time[MAX_SKILL_LEVEL], upkeep_time2[MAX_SKILL_LEVEL]; + int castcancel, cast_def_rate; + int inf2, maxcount; + int hp[MAX_SKILL_LEVEL], sp[MAX_SKILL_LEVEL], mhp[MAX_SKILL_LEVEL], hp_rate[MAX_SKILL_LEVEL], sp_rate[MAX_SKILL_LEVEL], zeny[MAX_SKILL_LEVEL]; - int weapon, state, spiritball[MAX_SKILL_LEVEL]; - int itemid[10], amount[10]; - int castnodex[MAX_SKILL_LEVEL]; + int weapon; + int itemid[10], amount[10]; + int castnodex[MAX_SKILL_LEVEL]; }; -extern struct skill_db skill_db[MAX_SKILL_DB]; +extern earray<struct skill_db, SkillID, SkillID::MAX_SKILL_DB> skill_db; struct skill_name_db { - int id; // skill id + SkillID id; // skill id const char *name; // search strings const char *desc; // description that shows up for search's }; + +// used only by @skillid for iteration - should be depublicized extern struct skill_name_db skill_names[]; +skill_name_db& skill_lookup_by_id(SkillID id); +skill_name_db& skill_lookup_by_name(const char *name); + struct block_list; struct map_session_data; -struct skill_unit; -struct skill_unit_group; -int do_init_skill (void); +int do_init_skill(void); // スキルデータベースへのアクセサ -int skill_get_hit (int id); -int skill_get_inf (int id); -int skill_get_pl (int id); -int skill_get_nk (int id); -int skill_get_max (int id); -int skill_get_max_raise (int id); -int skill_get_range (int id, int lv); -int skill_get_hp (int id, int lv); -int skill_get_mhp (int id, int lv); -int skill_get_sp (int id, int lv); -int skill_get_zeny (int id, int lv); -int skill_get_num (int id, int lv); -int skill_get_cast (int id, int lv); -int skill_get_delay (int id, int lv); -int skill_get_time (int id, int lv); -int skill_get_time2 (int id, int lv); -int skill_get_castdef (int id); -int skill_get_weapontype (int id); -int skill_get_unit_id (int id, int flag); -int skill_get_inf2 (int id); -int skill_get_maxcount (int id); -int skill_get_blewcount (int id, int lv); - -// スキルの使用 -int skill_use_id (struct map_session_data *sd, int target_id, - int skill_num, int skill_lv); -int skill_use_pos (struct map_session_data *sd, - int skill_x, int skill_y, int skill_num, int skill_lv); - -int skill_castend_map (struct map_session_data *sd, int skill_num, - const char *map); - -int skill_cleartimerskill (struct block_list *src); -int skill_addtimerskill (struct block_list *src, unsigned int tick, - int target, int x, int y, int skill_id, - int skill_lv, int type, int flag); +int skill_get_hit(SkillID id); +int skill_get_inf(SkillID id); +int skill_get_nk(SkillID id); +int skill_get_max(SkillID id); +int skill_get_max_raise(SkillID id); +int skill_get_range(SkillID id, int lv); +int skill_get_sp(SkillID id, int lv); +int skill_get_num(SkillID id, int lv); +int skill_get_cast(SkillID id, int lv); +int skill_get_delay(SkillID id, int lv); +int skill_get_inf2(SkillID id); +int skill_get_maxcount(SkillID id); // 追加効果 -int skill_additional_effect (struct block_list *src, struct block_list *bl, - int skillid, int skilllv, int attack_type, - unsigned int tick); - -// ユニットスキル -struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, - int x, int y); -int skill_delunit (struct skill_unit *unit); -struct skill_unit_group *skill_initunitgroup (struct block_list *src, - int count, int skillid, - int skilllv, int unit_id); -int skill_delunitgroup (struct skill_unit_group *group); -struct skill_unit_group_tickset *skill_unitgrouptickset_search (struct - block_list - *bl, - int group_id); -int skill_unitgrouptickset_delete (struct block_list *bl, int group_id); -int skill_clear_unitgroup (struct block_list *src); +int skill_additional_effect(struct block_list *src, struct block_list *bl, + SkillID skillid, int skilllv); -int skill_unit_ondamaged (struct skill_unit *src, struct block_list *bl, - int damage, unsigned int tick); +interval_t skill_castfix(struct block_list *bl, interval_t time); +interval_t skill_delayfix(struct block_list *bl, interval_t time); -int skill_castfix (struct block_list *bl, int time); -int skill_delayfix (struct block_list *bl, int time); -int skill_check_unit_range (int m, int x, int y, int range, int skillid); -int skill_check_unit_range2 (int m, int x, int y, int range); -// -- moonsoul (added skill_check_unit_cell) -int skill_check_unit_cell (int skillid, int m, int x, int y, int unit_id); -int skill_unit_out_all (struct block_list *bl, unsigned int tick, int range); -int skill_unit_move (struct block_list *bl, unsigned int tick, int range); -int skill_unit_move_unit_group (struct skill_unit_group *group, int m, - int dx, int dy); - -struct skill_unit_group *skill_check_dancing (struct block_list *src); -void skill_stop_dancing (struct block_list *src, int flag); +void skill_stop_dancing(struct block_list *src, int flag); // 詠唱キャンセル -int skill_castcancel (struct block_list *bl, int type); - -int skill_gangsterparadise (struct map_session_data *sd, int type); -void skill_brandishspear_first (struct square *tc, int dir, int x, int y); -void skill_brandishspear_dir (struct square *tc, int dir, int are); -int skill_autospell (struct map_session_data *md, int skillid); -void skill_devotion (struct map_session_data *md, int target); -void skill_devotion2 (struct block_list *bl, int crusader); -int skill_devotion3 (struct block_list *bl, int target); -void skill_devotion_end (struct map_session_data *md, - struct map_session_data *sd, int target); +int skill_castcancel(struct block_list *bl, int type); -#define skill_calc_heal(bl,skill_lv) (( battle_get_lv(bl)+battle_get_int(bl) )/8 *(4+ skill_lv*8)) - -// その他 -int skill_check_cloaking (struct block_list *bl); -int skill_is_danceskill (int id); +int skill_gangsterparadise(struct map_session_data *sd, int type); +void skill_devotion(struct map_session_data *md, int target); +int skill_devotion3(struct block_list *bl, int target); // ステータス異常 -int skill_status_effect (struct block_list *bl, int type, int val1, int val2, - int val3, int val4, int tick, int flag, - int spell_invocation); -int skill_status_change_start (struct block_list *bl, int type, int val1, - int val2, int val3, int val4, int tick, - int flag); -void skill_status_change_timer (timer_id, tick_t, custom_id_t, custom_data_t); -int skill_status_change_active (struct block_list *bl, int type); // [fate] -int skill_encchant_eremental_end (struct block_list *bl, int type); -int skill_status_change_end (struct block_list *bl, int type, int tid); -int skill_status_change_clear (struct block_list *bl, int type); +int skill_status_effect(struct block_list *bl, StatusChange type, + int val1, + interval_t tick, int spell_invocation); +int skill_status_change_start(struct block_list *bl, StatusChange type, + int val1, + interval_t tick); +int skill_status_change_active(struct block_list *bl, StatusChange type); // [fate] +void skill_status_change_end(struct block_list *bl, StatusChange type, TimerData *tid); +int skill_status_change_clear(struct block_list *bl, int type); // mobスキルのため -int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, - int skillid, int skilllv, unsigned int tick, - int flag); -int skill_castend_damage_id (struct block_list *src, struct block_list *bl, - int skillid, int skilllv, unsigned int tick, - int flag); -int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, - int skilllv, unsigned int tick, int flag); - -// スキル攻撃一括処理 -int skill_attack (int attack_type, struct block_list *src, - struct block_list *dsrc, struct block_list *bl, - int skillid, int skilllv, unsigned int tick, int flag); - -int skill_update_heal_animation (struct map_session_data *sd); // [Fate] Check whether the healing flag must be updated, do so if needed - -void skill_reload (void); - -enum -{ - ST_NONE, ST_HIDING, ST_CLOAKING, ST_HIDDEN, ST_RIDING, ST_FALCON, ST_CART, - ST_SHIELD, ST_SIGHT, ST_EXPLOSIONSPIRITS, - ST_RECOV_WEIGHT_RATE, ST_MOVE_ENABLE, ST_WATER, -}; - -enum -{ // struct map_session_data の status_changeの番号テーブル - SC_SENDMAX = 256, - SC_PROVOKE = 0, - SC_ENDURE = 1, - SC_TWOHANDQUICKEN = 2, - SC_CONCENTRATE = 3, - SC_HIDING = 4, - SC_CLOAKING = 5, - SC_ENCPOISON = 6, - SC_POISONREACT = 7, - SC_QUAGMIRE = 8, - SC_ANGELUS = 9, - SC_BLESSING = 10, - SC_SIGNUMCRUCIS = 11, - SC_INCREASEAGI = 12, - SC_DECREASEAGI = 13, - SC_SLOWPOISON = 14, - SC_IMPOSITIO = 15, - SC_SUFFRAGIUM = 16, - SC_ASPERSIO = 17, - SC_BENEDICTIO = 18, - SC_KYRIE = 19, - SC_MAGNIFICAT = 20, - SC_GLORIA = 21, - SC_AETERNA = 22, - SC_ADRENALINE = 23, - SC_WEAPONPERFECTION = 24, - SC_OVERTHRUST = 25, - SC_MAXIMIZEPOWER = 26, - SC_RIDING = 27, - SC_FALCON = 28, - SC_TRICKDEAD = 29, - SC_LOUD = 30, - SC_ENERGYCOAT = 31, - SC_BROKNARMOR = 32, - SC_BROKNWEAPON = 33, - SC_HALLUCINATION = 34, - SC_WEIGHT50 = 35, - SC_WEIGHT90 = 36, - SC_SPEEDPOTION0 = 37, - SC_SPEEDPOTION1 = 38, - SC_SPEEDPOTION2 = 39, - - SC_STRIPWEAPON = 50, - SC_STRIPSHIELD = 51, - SC_STRIPARMOR = 52, - SC_STRIPHELM = 53, - SC_CP_WEAPON = 54, - SC_CP_SHIELD = 55, - SC_CP_ARMOR = 56, - SC_CP_HELM = 57, - SC_AUTOGUARD = 58, - SC_REFLECTSHIELD = 59, - SC_DEVOTION = 60, - SC_PROVIDENCE = 61, - SC_DEFENDER = 62, - SC_AUTOSPELL = 65, - SC_EXPLOSIONSPIRITS = 86, - SC_STEELBODY = 87, - SC_SPEARSQUICKEN = 68, - - SC_HEALING = 70, - - SC_SIGHTTRASHER = 73, - - SC_COMBO = 89, - SC_FLAMELAUNCHER = 90, - SC_FROSTWEAPON = 91, - SC_LIGHTNINGLOADER = 92, - SC_SEISMICWEAPON = 93, - - SC_AURABLADE = 103, - SC_PARRYING = 104, - SC_CONCENTRATION = 105, - SC_TENSIONRELAX = 106, - SC_BERSERK = 107, - - SC_ASSUMPTIO = 110, - - SC_MAGICPOWER = 113, - - SC_TRUESIGHT = 115, - SC_WINDWALK = 116, - SC_MELTDOWN = 117, - SC_CARTBOOST = 118, - - SC_REJECTSWORD = 120, - SC_MARIONETTE = 121, - - SC_HEADCRUSH = 124, - SC_JOINTBEAT = 125, - SC_BASILICA = 125, - - SC_STONE = 128, - SC_FREEZE = 129, - SC_STAN = 130, - SC_SLEEP = 131, - SC_POISON = 132, - SC_CURSE = 133, - SC_SILENCE = 134, - SC_CONFUSION = 135, - SC_BLIND = 136, - - SC_SAFETYWALL = 140, - SC_PNEUMA = 141, - SC_WATERBALL = 142, - SC_ANKLE = 143, - SC_DANCING = 144, - SC_KEEPING = 145, - SC_BARRIER = 146, - - SC_MAGICROD = 149, - SC_SIGHT = 150, - SC_RUWACH = 151, - SC_AUTOCOUNTER = 152, - SC_VOLCANO = 153, - SC_DELUGE = 154, - SC_VIOLENTGALE = 155, - SC_BLADESTOP_WAIT = 156, - SC_BLADESTOP = 157, - SC_EXTREMITYFIST = 158, - SC_GRAFFITI = 159, - SC_ENSEMBLE = 159, - - SC_LULLABY = 160, - SC_RICHMANKIM = 161, - SC_ETERNALCHAOS = 162, - SC_DRUMBATTLE = 163, - SC_NIBELUNGEN = 164, - SC_ROKISWEIL = 165, - SC_INTOABYSS = 166, - SC_SIEGFRIED = 167, - SC_DISSONANCE = 168, - SC_WHISTLE = 169, - SC_ASSNCROS = 170, - SC_POEMBRAGI = 171, - SC_APPLEIDUN = 172, - SC_UGLYDANCE = 173, - SC_HUMMING = 174, - SC_DONTFORGETME = 175, - SC_FORTUNE = 176, - SC_SERVICE4U = 177, - SC_FOGWALL = 178, - SC_GOSPEL = 179, - SC_SPIDERWEB = 180, - SC_MEMORIZE = 181, - SC_LANDPROTECTOR = 182, - SC_ADAPTATION = 183, - SC_CHASEWALK = 184, - SC_ATKPOT = 185, - SC_MATKPOT = 186, - SC_WEDDING = 187, - SC_NOCHAT = 188, - SC_SPLASHER = 189, - SC_SELFDESTRUCTION = 190, - SC_MINDBREAKER = 191, - SC_SPELLBREAKER = 192, - -// Added for Fate's spells - SC_HIDE = 194, // Hide from `detect' magic - SC_HALT_REGENERATE = 195, // Suspend regeneration - SC_FLYING_BACKPACK = 196, // Flying backpack - SC_MBARRIER = 197, // Magical barrier, magic resistance (val1 : power (%)) - SC_HASTE = 198, // `Haste' spell (val1 : power) - SC_PHYS_SHIELD = 199, // `Protect' spell, reduce damage (val1: power) - - SC_DIVINA = SC_SILENCE, -}; -extern int SkillStatusChangeTable[]; +int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, + SkillID skillid, int skilllv); +int skill_castend_damage_id(struct block_list *src, struct block_list *bl, + SkillID skillid, int skilllv, tick_t tick, + BCT flag); -enum -{ - NV_EMOTE = 1, - NV_TRADE, - NV_PARTY, - - SM_SWORD, - SM_TWOHAND, - SM_RECOVERY, - SM_BASH, - SM_PROVOKE, - SM_MAGNUM, - SM_ENDURE, - - MG_SRECOVERY, - MG_SIGHT, - MG_NAPALMBEAT, - MG_SAFETYWALL, - MG_SOULSTRIKE, - MG_COLDBOLT, - MG_FROSTDIVER, - MG_STONECURSE, - MG_FIREBALL, - MG_FIREWALL, - MG_FIREBOLT, - MG_LIGHTNINGBOLT, - MG_THUNDERSTORM, - - AL_DP, - AL_DEMONBANE, - AL_RUWACH, - AL_PNEUMA, - AL_TELEPORT, - AL_WARP, - AL_HEAL, - AL_INCAGI, - AL_DECAGI, - AL_HOLYWATER, - AL_CRUCIS, - AL_ANGELUS, - AL_BLESSING, - AL_CURE, - - MC_INCCARRY, - MC_DISCOUNT, - MC_OVERCHARGE, - MC_PUSHCART, - MC_IDENTIFY, - MC_VENDING, - MC_MAMMONITE, - - AC_OWL = 45, - AC_VULTURE, - AC_CONCENTRATION, - AC_DOUBLE, - AC_SHOWER, - - TF_DOUBLE, - TF_MISS, - TF_STEAL, - TF_HIDING, - TF_POISON, - TF_DETOXIFY, - - ALL_RESURRECTION, - - KN_SPEARMASTERY, - KN_PIERCE, - KN_BRANDISHSPEAR, - KN_SPEARSTAB, - KN_SPEARBOOMERANG, - KN_TWOHANDQUICKEN, - KN_AUTOCOUNTER, - KN_BOWLINGBASH, - KN_RIDING, - KN_CAVALIERMASTERY, - - PR_MACEMASTERY, - PR_IMPOSITIO, - PR_SUFFRAGIUM, - PR_ASPERSIO, - PR_BENEDICTIO, - PR_SANCTUARY, - PR_SLOWPOISON, - PR_STRECOVERY, - PR_KYRIE, - PR_MAGNIFICAT, - PR_GLORIA, - PR_LEXDIVINA, - PR_TURNUNDEAD, - PR_LEXAETERNA, - PR_MAGNUS, - - WZ_FIREPILLAR, - WZ_SIGHTRASHER, - WZ_FIREIVY, - WZ_METEOR, - WZ_JUPITEL, - WZ_VERMILION, - WZ_WATERBALL, - WZ_ICEWALL, - WZ_FROSTNOVA, - WZ_STORMGUST, - WZ_EARTHSPIKE, - WZ_HEAVENDRIVE, - WZ_QUAGMIRE, - WZ_ESTIMATION, - - BS_IRON, - BS_STEEL, - BS_ENCHANTEDSTONE, - BS_ORIDEOCON, - BS_DAGGER, - BS_SWORD, - BS_TWOHANDSWORD, - BS_AXE, - BS_MACE, - BS_KNUCKLE, - BS_SPEAR, - BS_HILTBINDING, - BS_FINDINGORE, - BS_WEAPONRESEARCH, - BS_REPAIRWEAPON, - BS_SKINTEMPER, - BS_HAMMERFALL, - BS_ADRENALINE, - BS_WEAPONPERFECT, - BS_OVERTHRUST, - BS_MAXIMIZE, - - HT_SKIDTRAP, - HT_LANDMINE, - HT_ANKLESNARE, - HT_SHOCKWAVE, - HT_SANDMAN, - HT_FLASHER, - HT_FREEZINGTRAP, - HT_BLASTMINE, - HT_CLAYMORETRAP, - HT_REMOVETRAP, - HT_TALKIEBOX, - HT_BEASTBANE, - HT_FALCON, - HT_STEELCROW, - HT_BLITZBEAT, - HT_DETECTING, - HT_SPRINGTRAP, - - AS_RIGHT, - AS_LEFT, - AS_KATAR, - AS_CLOAKING, - AS_SONICBLOW, - AS_GRIMTOOTH, - AS_ENCHANTPOISON, - AS_POISONREACT, - AS_VENOMDUST, - AS_SPLASHER, - - NV_FIRSTAID, - NV_TRICKDEAD, - SM_MOVINGRECOVERY, - SM_FATALBLOW, - SM_AUTOBERSERK, - AC_MAKINGARROW, - AC_CHARGEARROW, - TF_SPRINKLESAND, - TF_BACKSLIDING, - TF_PICKSTONE, - TF_THROWSTONE, - MC_CARTREVOLUTION, - MC_CHANGECART, - MC_LOUD, - AL_HOLYLIGHT, - MG_ENERGYCOAT, - - NPC_PIERCINGATT, - NPC_MENTALBREAKER, - NPC_RANGEATTACK, - NPC_ATTRICHANGE, - NPC_CHANGEWATER, - NPC_CHANGEGROUND, - NPC_CHANGEFIRE, - NPC_CHANGEWIND, - NPC_CHANGEPOISON, - NPC_CHANGEHOLY, - NPC_CHANGEDARKNESS, - NPC_CHANGETELEKINESIS, - NPC_CRITICALSLASH, - NPC_COMBOATTACK, - NPC_GUIDEDATTACK, - NPC_SELFDESTRUCTION, - NPC_SPLASHATTACK, - NPC_SUICIDE, - NPC_POISON, - NPC_BLINDATTACK, - NPC_SILENCEATTACK, - NPC_STUNATTACK, - NPC_PETRIFYATTACK, - NPC_CURSEATTACK, - NPC_SLEEPATTACK, - NPC_RANDOMATTACK, - NPC_WATERATTACK, - NPC_GROUNDATTACK, - NPC_FIREATTACK, - NPC_WINDATTACK, - NPC_POISONATTACK, - NPC_HOLYATTACK, - NPC_DARKNESSATTACK, - NPC_TELEKINESISATTACK, - NPC_MAGICALATTACK, - NPC_METAMORPHOSIS, - NPC_PROVOCATION, - NPC_SMOKING, - NPC_SUMMONSLAVE, - NPC_EMOTION, - NPC_TRANSFORMATION, - NPC_BLOODDRAIN, - NPC_ENERGYDRAIN, - NPC_KEEPING, - NPC_DARKBREATH, - NPC_DARKBLESSING, - NPC_BARRIER, - NPC_DEFENDER, - NPC_LICK, - NPC_HALLUCINATION, - NPC_REBIRTH, - NPC_SUMMONMONSTER, - - RG_SNATCHER, - RG_STEALCOIN, - RG_BACKSTAP, - RG_TUNNELDRIVE, - RG_RAID, - RG_STRIPWEAPON, - RG_STRIPSHIELD, - RG_STRIPARMOR, - RG_STRIPHELM, - RG_INTIMIDATE, - RG_GRAFFITI, - RG_FLAGGRAFFITI, - RG_CLEANER, - RG_GANGSTER, - RG_COMPULSION, - RG_PLAGIARISM, +int skill_update_heal_animation(struct map_session_data *sd); // [Fate] Check whether the healing flag must be updated, do so if needed - AM_AXEMASTERY, - AM_LEARNINGPOTION, - AM_PHARMACY, - AM_DEMONSTRATION, - AM_ACIDTERROR, - AM_POTIONPITCHER, - AM_CANNIBALIZE, - AM_SPHEREMINE, - AM_CP_WEAPON, - AM_CP_SHIELD, - AM_CP_ARMOR, - AM_CP_HELM, - AM_BIOETHICS, - AM_BIOTECHNOLOGY, - AM_CREATECREATURE, - AM_CULTIVATION, - AM_FLAMECONTROL, - AM_CALLHOMUN, - AM_REST, - AM_DRILLMASTER, - AM_HEALHOMUN, - AM_RESURRECTHOMUN, - - CR_TRUST, - CR_AUTOGUARD, - CR_SHIELDCHARGE, - CR_SHIELDBOOMERANG, - CR_REFLECTSHIELD, - CR_HOLYCROSS, - CR_GRANDCROSS, - CR_DEVOTION, - CR_PROVIDENCE, - CR_DEFENDER, - CR_SPEARQUICKEN, - - MO_IRONHAND, - MO_SPIRITSRECOVERY, - MO_CALLSPIRITS, - MO_ABSORBSPIRITS, - MO_TRIPLEATTACK, - MO_BODYRELOCATION, - MO_DODGE, - MO_INVESTIGATE, - MO_FINGEROFFENSIVE, - MO_STEELBODY, - MO_BLADESTOP, - MO_EXPLOSIONSPIRITS, - MO_EXTREMITYFIST, - MO_CHAINCOMBO, - MO_COMBOFINISH, - - SA_ADVANCEDBOOK, - SA_CASTCANCEL, - SA_MAGICROD, - SA_SPELLBREAKER, - SA_FREECAST, - SA_AUTOSPELL, - SA_FLAMELAUNCHER, - SA_FROSTWEAPON, - SA_LIGHTNINGLOADER, - SA_SEISMICWEAPON, - SA_DRAGONOLOGY, - SA_VOLCANO, - SA_DELUGE, - SA_VIOLENTGALE, - SA_LANDPROTECTOR, - SA_DISPELL, - SA_ABRACADABRA, - SA_MONOCELL, - SA_CLASSCHANGE, - SA_SUMMONMONSTER, - SA_REVERSEORCISH, - SA_DEATH, - SA_FORTUNE, - SA_TAMINGMONSTER, - SA_QUESTION, - SA_GRAVITY, - SA_LEVELUP, - SA_INSTANTDEATH, - SA_FULLRECOVERY, - SA_COMA, - - BD_ADAPTATION, - BD_ENCORE, - BD_LULLABY, - BD_RICHMANKIM, - BD_ETERNALCHAOS, - BD_DRUMBATTLEFIELD, - BD_RINGNIBELUNGEN, - BD_ROKISWEIL, - BD_INTOABYSS, - BD_SIEGFRIED, - BD_RAGNAROK, - - BA_MUSICALLESSON, - BA_MUSICALSTRIKE, - BA_DISSONANCE, - BA_FROSTJOKE, - BA_WHISTLE, - BA_ASSASSINCROSS, - BA_POEMBRAGI, - BA_APPLEIDUN, - - DC_DANCINGLESSON, - DC_THROWARROW, - DC_UGLYDANCE, - DC_SCREAM, - DC_HUMMING, - DC_DONTFORGETME, - DC_FORTUNEKISS, - DC_SERVICEFORYOU, - - NPC_SELFDESTRUCTION2 = 333, - - WE_MALE = 334, - WE_FEMALE, - WE_CALLPARTNER, - - NPC_DARKCROSS = 338, - - TMW_SKILLPOOL = 339, // skill pool size - - TMW_MAGIC = 340, - TMW_MAGIC_LIFE = 341, - TMW_MAGIC_WAR = 342, - TMW_MAGIC_TRANSMUTE = 343, - TMW_MAGIC_NATURE = 344, - TMW_MAGIC_ETHER = 345, - TMW_MAGIC_DARK = 346, - TMW_MAGIC_LIGHT = 347, - - TMW_BRAWLING = 350, - TMW_LUCKY_COUNTER = 351, - TMW_SPEED = 352, - TMW_RESIST_POISON = 353, - TMW_ASTRAL_SOUL = 354, - TMW_RAGING = 355, - - LK_AURABLADE = 356, - LK_PARRYING, - LK_CONCENTRATION, - LK_TENSIONRELAX, - LK_BERSERK, - LK_FURY, - HP_ASSUMPTIO, - HP_BASILICA, - HP_MEDITATIO, - HW_SOULDRAIN, - HW_MAGICCRASHER, - HW_MAGICPOWER, - PA_PRESSURE, - PA_SACRIFICE, - PA_GOSPEL, - CH_PALMSTRIKE, - CH_TIGERFIST, - CH_CHAINCRUSH, - PF_HPCONVERSION, - PF_SOULCHANGE, - PF_SOULBURN, - ASC_KATAR, - ASC_HALLUCINATION, - ASC_EDP, - ASC_BREAKER, - SN_SIGHT, - SN_FALCONASSAULT, - SN_SHARPSHOOTING, - SN_WINDWALK, - WS_MELTDOWN, - WS_CREATECOIN, - WS_CREATENUGGET, - WS_CARTBOOST, - WS_SYSTEMCREATE, - ST_CHASEWALK, - ST_REJECTSWORD, - ST_STEALBACKPACK, - CR_ALCHEMY, - CR_SYNTHESISPOTION, - CG_ARROWVULCAN, - CG_MOONLIT, - CG_MARIONETTE, - LK_SPIRALPIERCE, - LK_HEADCRUSH, - LK_JOINTBEAT, - HW_NAPALMVULCAN, - CH_SOULCOLLECT, - PF_MINDBREAKER, - PF_MEMORIZE, - PF_FOGWALL, - PF_SPIDERWEB, - ASC_METEORASSAULT, - ASC_CDP, - WE_BABY, - WE_CALLPARENT, - WE_CALLBABY, - TK_RUN, - TK_READYSTORM, - TK_STORMKICK, - TK_READYDOWN, - TK_DOWNKICK, - TK_READYTURN, - TK_TURNKICK, - TK_READYCOUNTER, - TK_COUNTER, - TK_DODGE, - TK_JUMPKICK, - TK_HPTIME, - TK_SPTIME, - TK_POWER, - TK_SEVENWIND, - TK_HIGHJUMP, - SG_FEEL, - SG_SUN_WARM, - SG_MOON_WARM, - SG_STAR_WARM, - SG_SUN_COMFORT, - SG_MOON_COMFORT, - SG_STAR_COMFORT, - SG_HATE, - SG_SUN_ANGER, - SG_MOON_ANGER, - SG_STAR_ANGER, - SG_SUN_BLESS, - SG_MOON_BLESS, - SG_STAR_BLESS, - SG_DEVIL, - SG_FRIEND, - SG_KNOWLEDGE, - SG_FUSION, - SL_ALCHEMIST, - AM_BERSERKPITCHER, - SL_MONK, - SL_STAR, - SL_SAGE, - SL_CRUSADER, - SL_SUPERNOVICE, - SL_KNIGHT, - SL_WIZARD, - SL_PRIEST, - SL_BARDDANCER, - SL_ROGUE, - SL_ASSASIN, - SL_BLACKSMITH, - BS_ADRENALINE2, - SL_HUNTER, - SL_SOULLINKER, - SL_KAIZEL, - SL_KAAHI, - SL_KAUPE, - SL_KAITE, - SL_KAINA, - SL_STIN, - SL_STUN, - SL_SMA, - SL_SWOO, - SL_SKE, - SL_SKA, - - GD_APPROVAL = 10000, - GD_KAFRACONTACT, - GD_GUARDIANRESEARCH, - GD_CHARISMA, - GD_EXTENSION, -}; +void skill_reload(void); // [Fate] Skill pools API // Max. # of active entries in the skill pool -#define MAX_SKILL_POOL 3 +constexpr int MAX_SKILL_POOL = 3; // Max. # of skills that may be classified as pool skills in db/skill_db.txt -#define MAX_POOL_SKILLS 128 +constexpr int MAX_POOL_SKILLS = 128; -extern int skill_pool_skills[MAX_POOL_SKILLS]; // All pool skills +extern SkillID skill_pool_skills[MAX_POOL_SKILLS]; // All pool skills extern int skill_pool_skills_size; // Number of entries in skill_pool_skills -int skill_pool (struct map_session_data *sd, int *skills); // Yields all active skills in the skill pool; no more than MAX_SKILL_POOL. Return is number of skills. -int skill_pool_size (struct map_session_data *sd); -int skill_pool_max (struct map_session_data *sd); // Max. number of pool skills -void skill_pool_empty (struct map_session_data *sd); // Deactivate all pool skills -int skill_pool_activate (struct map_session_data *sd, int skill); // Skill into skill pool. Return is zero iff okay. -int skill_pool_is_activated (struct map_session_data *sd, int skill); // Skill into skill pool. Return is zero when activated. -int skill_pool_deactivate (struct map_session_data *sd, int skill); // Skill out of skill pool. Return is zero iff okay. -const char *skill_name(int skill); // Yield configurable skill name -int skill_stat (int skill); // Yields the stat associated with a skill. Returns zero if none, or SP_STR, SP_VIT, ... otherwise -int skill_power (struct map_session_data *sd, int skill); // Yields the power of a skill. This is zero if the skill is unknown or if it's a pool skill that is outside of the skill pool, - // otherwise a value from 0 to 255 (with 200 being the `normal maximum') -int skill_power_bl (struct block_list *bl, int skill); // Yields the power of a skill. This is zero if the skill is unknown or if it's a pool skill that is outside of the skill pool, - // otherwise a value from 0 to 255 (with 200 being the `normal maximum') - -void skill_pool_register (int id); // [Fate] Remember that a certain skill ID belongs to a pool skill -#endif +// Yields all active skills in the skill pool; no more than MAX_SKILL_POOL. Return is number of skills. +int skill_pool(struct map_session_data *sd, SkillID *skills); +int skill_pool_size(struct map_session_data *sd); +int skill_pool_max(struct map_session_data *sd); // Max. number of pool skills +// Skill into skill pool. Return is zero iff okay. +int skill_pool_activate(struct map_session_data *sd, SkillID skill); +// Skill into skill pool. Return is zero when activated. +bool skill_pool_is_activated(struct map_session_data *sd, SkillID skill); +// Skill out of skill pool. Return is zero iff okay. +int skill_pool_deactivate(struct map_session_data *sd, SkillID skill); +// Yield configurable skill name +inline +const char *skill_name(SkillID skill) +{ + return skill_lookup_by_id(skill).desc; +} +// Yields the power of a skill. +// This is zero if the skill is unknown +// or if it's a pool skill that is outside of the skill pool, +// otherwise a value from 0 to 255 (with 200 being the `normal maximum') +int skill_power(struct map_session_data *sd, SkillID skill); +int skill_power_bl(struct block_list *bl, SkillID skill); + +// [Fate] Remember that a certain skill ID belongs to a pool skill +void skill_pool_register(SkillID id); +#endif // SKILL_HPP |