summaryrefslogtreecommitdiff
path: root/src/map/skill.hpp
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2012-12-14 22:25:07 -0800
committerBen Longbons <b.r.longbons@gmail.com>2012-12-15 19:41:53 -0800
commit4bd7eeec09629d3c0f900d42c899fe23c69e07b6 (patch)
tree4fbbfa45d9538cab7e1062f2c927297bb93ada0a /src/map/skill.hpp
parent069f39e8a1ebee3e4a4ce8302d0099842876782b (diff)
downloadtmwa-4bd7eeec09629d3c0f900d42c899fe23c69e07b6.tar.gz
tmwa-4bd7eeec09629d3c0f900d42c899fe23c69e07b6.tar.bz2
tmwa-4bd7eeec09629d3c0f900d42c899fe23c69e07b6.tar.xz
tmwa-4bd7eeec09629d3c0f900d42c899fe23c69e07b6.zip
Prepare to trim skills
Diffstat (limited to 'src/map/skill.hpp')
-rw-r--r--src/map/skill.hpp833
1 files changed, 84 insertions, 749 deletions
diff --git a/src/map/skill.hpp b/src/map/skill.hpp
index 38a0ed5..5452bd2 100644
--- a/src/map/skill.hpp
+++ b/src/map/skill.hpp
@@ -2,12 +2,13 @@
#ifndef SKILL_HPP
#define SKILL_HPP
+#include "skill.t.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
@@ -29,20 +30,27 @@ struct skill_db
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 weapon;
+ SkillState state;
+ int spiritball[MAX_SKILL_LEVEL];
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, 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;
@@ -51,46 +59,46 @@ 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_get_hit(SkillID id);
+int skill_get_inf(SkillID id);
+int skill_get_pl(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_hp(SkillID id, int lv);
+int skill_get_mhp(SkillID id, int lv);
+int skill_get_sp(SkillID id, int lv);
+int skill_get_zeny(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_time(SkillID id, int lv);
+int skill_get_time2(SkillID id, int lv);
+int skill_get_castdef(SkillID id);
+int skill_get_weapontype(SkillID id);
+int skill_get_unit_id(SkillID id, int flag);
+int skill_get_inf2(SkillID id);
+int skill_get_maxcount(SkillID id);
+int skill_get_blewcount(SkillID id, int lv);
// スキルの使用
int skill_use_id(struct map_session_data *sd, int target_id,
- int skill_num, int skill_lv);
+ SkillID 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_x, int skill_y, SkillID skill_num, int skill_lv);
-int skill_castend_map(struct map_session_data *sd, int skill_num,
+int skill_castend_map(struct map_session_data *sd, SkillID 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 target, int x, int y, SkillID 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,
+ SkillID skillid, int skilllv, int attack_type,
unsigned int tick);
// ユニットスキル
@@ -98,7 +106,7 @@ 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 count, SkillID skillid,
int skilllv, int unit_id);
int skill_delunitgroup(struct skill_unit_group *group);
struct skill_unit_group_tickset *skill_unitgrouptickset_search(struct
@@ -113,10 +121,10 @@ int skill_unit_ondamaged(struct skill_unit *src, struct block_list *bl,
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_range(int m, int x, int y, int range, SkillID 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_check_unit_cell(SkillID 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,
@@ -131,7 +139,7 @@ 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);
+int skill_autospell(struct map_session_data *md, SkillID 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);
@@ -142,727 +150,40 @@ void skill_devotion_end(struct map_session_data *md,
// その他
int skill_check_cloaking(struct block_list *bl);
-int skill_is_danceskill(int id);
+int skill_is_danceskill(SkillID 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);
+int skill_status_effect(struct block_list *bl, StatusChange 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, StatusChange 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_active(struct block_list *bl, StatusChange type); // [fate]
+int skill_encchant_eremental_end(struct block_list *bl, StatusChange type);
+int skill_status_change_end(struct block_list *bl, StatusChange 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,
+ SkillID 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,
+ SkillID skillid, int skilllv, unsigned int tick,
int flag);
-int skill_castend_pos2(struct block_list *src, int x, int y, int skillid,
+int skill_castend_pos2(struct block_list *src, int x, int y, SkillID 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);
+ SkillID 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,
-};
+extern earray<StatusChange, SkillID, MAX_SKILL_DB> SkillStatusChangeTable;
// [Fate] Skill pools API
@@ -871,22 +192,36 @@ enum
// 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 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.
+// 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
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
+// 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.
+int 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 stat associated with a skill.
+// Returns zero if none, or SP_STR, SP_VIT, ... otherwise
+int skill_stat(SkillID 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(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