summaryrefslogtreecommitdiff
path: root/src/map/skill.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/skill.hpp')
-rw-r--r--src/map/skill.hpp891
1 files changed, 891 insertions, 0 deletions
diff --git a/src/map/skill.hpp b/src/map/skill.hpp
new file mode 100644
index 0000000..e2aaba5
--- /dev/null
+++ b/src/map/skill.hpp
@@ -0,0 +1,891 @@
+// $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 "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)
+
+// スキルデータベース
+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],
+ 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];
+};
+extern struct skill_db skill_db[MAX_SKILL_DB];
+
+struct skill_name_db
+{
+ int id; // skill id
+ const char *name; // search strings
+ const char *desc; // description that shows up for search's
+};
+extern struct skill_name_db skill_names[];
+
+struct block_list;
+struct map_session_data;
+struct skill_unit;
+struct skill_unit_group;
+
+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_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_unit_ondamaged (struct skill_unit *src, struct block_list *bl,
+ int damage, unsigned int tick);
+
+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);
+
+// 詠唱キャンセル
+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);
+
+#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_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);
+
+// 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[];
+
+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,
+
+ 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,
+};
+
+// [Fate] Skill pools API
+
+// Max. # of active entries in the skill pool
+#define MAX_SKILL_POOL 3
+// Max. # of skills that may be classified as pool skills in db/skill_db.txt
+#define MAX_POOL_SKILLS 128
+
+extern int 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.
+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')
+
+#endif