// $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. 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