OSDN Git Service

First version
[st-ro/stro.git] / src / map / skill.h
1 // Copyright (c) Athena Dev Teams - Licensed under GNU GPL
2 // For more information, see LICENCE in the main folder
3
4 #ifndef _SKILL_H_
5 #define _SKILL_H_
6
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10
11 #include "../common/mmo.h" // MAX_SKILL, struct square
12 #include "../common/db.h"
13 #include "map.h" // struct block_list
14 #include "battle.h" // enum damage_lv
15 struct map_session_data;
16 struct homun_data;
17 struct skill_unit;
18 struct skill_unit_group;
19 struct status_change_entry;
20
21 #define MAX_SKILL_PRODUCE_DB    280 /// Max Produce DB
22 #define MAX_PRODUCE_RESOURCE    12 /// Max Produce requirements
23 #define MAX_SKILL_ARROW_DB              150 /// Max Arrow Creation DB
24 #define MAX_ARROW_RESULT                5 /// Max Arrow results/created
25 #define MAX_SKILL_ABRA_DB               160 /// Max Skill list of Abracadabra DB
26 #define MAX_SKILL_IMPROVISE_DB 30 /// Max Skill for Improvise
27 #define MAX_SKILL_LEVEL 13 /// Max Skill Level (for skill_db storage)
28 #define MAX_MOBSKILL_LEVEL 100  /// Max monster skill level (on skill usage)
29 #define MAX_SKILL_CRIMSON_MARKER 3 /// Max Crimson Marker targets (RL_C_MARKER)
30 #define SKILL_NAME_LENGTH 31 /// Max Skill Name length
31 #define SKILL_DESC_LENGTH 31 /// Max Skill Desc length
32
33 extern DBMap* skilldb_name2id;
34
35 /// Constants to identify a skill's nk value (damage properties)
36 /// The NK value applies only to non INF_GROUND_SKILL skills
37 /// when determining skill castend function to invoke.
38 enum e_skill_nk {
39         NK_NO_DAMAGE      = 0x01,
40         NK_SPLASH         = 0x02|0x04, // 0x4 = splash & split
41         NK_SPLASHSPLIT    = 0x04,
42         NK_NO_CARDFIX_ATK = 0x08,
43         NK_NO_ELEFIX      = 0x10,
44         NK_IGNORE_DEF     = 0x20,
45         NK_IGNORE_FLEE    = 0x40,
46         NK_NO_CARDFIX_DEF = 0x80,
47 };
48
49 /// Constants to identify the skill's inf value:
50 enum e_skill_inf {
51         INF_ATTACK_SKILL  = 0x01,
52         INF_GROUND_SKILL  = 0x02,
53         INF_SELF_SKILL    = 0x04, // Skills casted on self where target is automatically chosen
54         // 0x08 not assigned
55         INF_SUPPORT_SKILL = 0x10,
56         INF_TARGET_TRAP   = 0x20,
57 };
58
59 /// A skill with 3 would be no damage + splash: area of effect.
60 /// Constants to identify a skill's inf2 value.
61 enum e_skill_inf2 {
62         INF2_QUEST_SKILL     = 0x00001,
63         INF2_NPC_SKILL       = 0x00002, //NPC skills are those that players can't have in their skill tree.
64         INF2_WEDDING_SKILL   = 0x00004,
65         INF2_SPIRIT_SKILL    = 0x00008,
66         INF2_GUILD_SKILL     = 0x00010,
67         INF2_SONG_DANCE      = 0x00020,
68         INF2_ENSEMBLE_SKILL  = 0x00040,
69         INF2_TRAP            = 0x00080,
70         INF2_TARGET_SELF     = 0x00100, //Refers to ground placed skills that will target the caster as well (like Grandcross)
71         INF2_NO_TARGET_SELF  = 0x00200,
72         INF2_PARTY_ONLY      = 0x00400,
73         INF2_GUILD_ONLY      = 0x00800,
74         INF2_NO_ENEMY        = 0x01000,
75         INF2_AUTOSHADOWSPELL = 0x02000, // Skill that available for SC_AUTOSHADOWSPELL
76         INF2_CHORUS_SKILL        = 0x04000, // Chorus skill
77         INF2_NO_BG_DMG           = 0x08000, // Skill that ignore bg reduction
78         INF2_NO_GVG_DMG          = 0x10000, // Skill that ignore gvg reduction
79         INF2_NO_NEARNPC      = 0x20000, // disable to cast skill if near with NPC [Cydh]
80         INF2_HIT_TRAP        = 0x40000, // can hit trap-type skill (INF2_TRAP) [Cydh]
81 };
82
83 /// Skill info type 3
84 enum e_skill_inf3 {
85         INF3_NOLP             = 0x00001, // Skill that can ignore Land Protector
86         INF3_FREE             = 0x00002, // Free
87         INF3_USABLE_HIDING    = 0x00004, // Skill that can be use in hiding
88         INF3_USABLE_DANCE     = 0x00008, // Skill that can be use while in dancing state
89         INF3_HIT_EMP          = 0x00010, // Skill that could hit emperium
90         INF3_STASIS_BL        = 0x00020, // Skill that can ignore SC_STASIS
91         INF3_KAGEHUMI_BL      = 0x00040, // Skill blocked by kagehumi
92         INF3_EFF_VULTURE      = 0x00080, // Skill range affected by AC_VULTURE
93         INF3_EFF_SNAKEEYE     = 0x00100, // Skill range affected by GS_SNAKEEYE
94         INF3_EFF_SHADOWJUMP   = 0x00200, // Skill range affected by NJ_SHADOWJUMP
95         INF3_EFF_RADIUS       = 0x00400, // Skill range affected by WL_RADIUS
96         INF3_EFF_RESEARCHTRAP = 0x00800, // Skill range affected by RA_RESEARCHTRAP
97         INF3_NO_EFF_HOVERING  = 0x01000, // Skill that does not affect user that has SC_HOVERING active
98         INF3_USABLE_WARG      = 0x02000, // Skill that can be use while riding warg
99         INF3_DIS_MADO         = 0x04000, // Skill that can't be used while in mado
100         INF3_USABLE_MANHOLE   = 0x08000, // Skill that can be used to target while under SC__MANHOLE effect
101         INF3_HIT_HIDING       = 0x10000, // Skill that affects hidden targets
102         INF3_SC_GLOOMYDAY_SK  = 0x20000, // Skill that affects SC_GLOOMYDAY_SK
103         INF3_SC_DANCEWITHWUG  = 0x40000, // Skill that is affected by SC_DANCEWITHWUG
104         INF3_BITE_BLOCK       = 0x80000, // Skill blocked by RA_WUGBITE
105 };
106
107 /// Walk intervals at which chase-skills are attempted to be triggered.
108 /// If you change this, make sure it's an odd value (for icewall block behavior).
109 #define WALK_SKILL_INTERVAL 5
110
111 /// Time that's added to canact delay on castbegin and substracted on castend
112 /// This is to prevent hackers from sending a skill packet after cast but before a timer triggers castend
113 #define SECURITY_CASTTIME 100
114
115 /// Flags passed to skill_attack/skill_area_sub
116 enum e_skill_display {
117         SD_LEVEL     = 0x1000, // skill_attack will send -1 instead of skill level (affects display of some skills)
118         SD_ANIMATION = 0x2000, // skill_attack will use '5' instead of the skill's 'type' (this makes skills show an animation). Also being used in skill_attack for splash skill (NK_SPLASH) to check status_check_skilluse
119         SD_SPLASH    = 0x4000, // skill_area_sub will count targets in skill_area_temp[2]
120         SD_PREAMBLE  = 0x8000, // skill_area_sub will transmit a 'magic' damage packet (-30000 dmg) for the first target selected
121 };
122
123 #define MAX_SKILL_ITEM_REQUIRE  10 /// Maximum required items
124 #define MAX_SKILL_STATUS_REQUIRE 3 /// Maximum required statuses
125 #define MAX_SKILL_EQUIP_REQUIRE 10 /// Maximum required equipped item
126
127 /// Single skill requirement. !TODO: Cleanup the variable types
128 struct skill_condition {
129         int32 hp;                                                                ///< HP cost
130         int32 mhp;                                                               ///< Max HP to trigger
131         int32 sp;                                                                /// SP cost
132         int16 hp_rate;                                                   /// HP cost (%)
133         int16 sp_rate;                                                   /// SP cost (%)
134         uint32 zeny;                                                     /// Zeny cost
135         uint32 weapon;                                                   /// Weapon type. Combined bitmask of enum weapon_type (1<<weapon)
136         uint16 ammo;                                                     /// Ammo type. Combine bitmask of enum ammo_type (1<<ammo)
137         int8 ammo_qty;                                                   /// Amount of ammo
138         uint8 state;                                                     /// State/condition. @see enum e_require_state
139         int8 spiritball;                                                 /// Spiritball cost
140         uint16 itemid[MAX_SKILL_ITEM_REQUIRE];   /// Required item
141         uint16 amount[MAX_SKILL_ITEM_REQUIRE];   /// Amount of item
142         uint16 *eqItem;                                                  /// List of equipped item
143         enum sc_type *status;                                    /// List of Status required (SC)
144         uint8 status_count,                                              /// Count of SC
145                 eqItem_count;                                            /// Count of equipped item
146 };
147
148 /// Skill requirement structure. !TODO: Cleanup the variable types that use array [MAX_SKILL_LEVEL]
149 struct s_skill_require {
150         int hp[MAX_SKILL_LEVEL];                                 ///< HP cost
151         int mhp[MAX_SKILL_LEVEL];                                ///< Max HP to trigger
152         int sp[MAX_SKILL_LEVEL];                                 /// SP cost
153         int hp_rate[MAX_SKILL_LEVEL];                    /// HP cost (%)
154         int sp_rate[MAX_SKILL_LEVEL];                    /// SP cost (%)
155         int zeny[MAX_SKILL_LEVEL];                               /// Zeny cost
156         uint32 weapon;                                                   /// Weapon type. Combined bitmask of enum weapon_type (1<<weapon)
157         uint16 ammo;                                                     /// Ammo type. Combine bitmask of enum ammo_type (1<<ammo)
158         int ammo_qty[MAX_SKILL_LEVEL];                   /// Amount of ammo
159         uint8 state;                                                     /// State/condition. @see enum e_require_state
160         int spiritball[MAX_SKILL_LEVEL];                 /// Spiritball cost
161         uint16 itemid[MAX_SKILL_ITEM_REQUIRE];   /// Required item
162         uint16 amount[MAX_SKILL_ITEM_REQUIRE];   /// Amount of item
163         uint16 *eqItem;                                                  /// List of equipped item
164         enum sc_type *status;                                    /// List of Status required (SC)
165         uint8 status_count,                                              /// Count of SC
166                 eqItem_count;                                            /// Count of equipped item
167 };
168
169 /// Database skills. !TODO: Cleanup the variable types that use array [MAX_SKILL_LEVEL]
170 struct s_skill_db {
171         // skill_db.txt
172         uint16 nameid;                                                           ///< Skill ID
173         char name[SKILL_NAME_LENGTH];                            ///< AEGIS_Name
174         char desc[SKILL_DESC_LENGTH];                            ///< English Name
175         int range[MAX_SKILL_LEVEL];                                      ///< Range
176         int8 hit;                                                                        ///< Hit type
177         uint8 inf;                                                                       ///< Inf: 0- passive, 1- enemy, 2- place, 4- self, 16- friend, 32- trap
178         int element[MAX_SKILL_LEVEL];                            ///< Element
179         uint8 nk;                                                                        ///< Damage properties
180         int splash[MAX_SKILL_LEVEL];                             ///< Splash effect
181         uint8 max;                                                                       ///< Max level
182         int num[MAX_SKILL_LEVEL];                                        ///< Number of hit
183         bool castcancel;                                                         ///< Cancel cast when being hit
184         int16 cast_def_rate;                                             ///< Def rate during cast a skill
185         uint16 skill_type;                                                       ///< Skill type
186         int blewcount[MAX_SKILL_LEVEL];                          ///< Blew count
187         uint32 inf2;                                                             ///< Skill flags @see enum e_skill_inf2
188         uint32 inf3;                                                             ///< Skill flags @see enum e_skill_inf3
189         int maxcount[MAX_SKILL_LEVEL];                           ///< Max number skill can be casted in same map
190
191         // skill_castnodex_db.txt
192         uint8 castnodex;                                                         ///< 1 - Not affected by dex, 2 - Not affected by SC, 4 - Not affected by item
193         uint8 delaynodex;                                                        ///< 1 - Not affected by dex, 2 - Not affected by SC, 4 - Not affected by item
194
195         // skill_nocast_db.txt
196         uint32 nocast;                                                           ///< Skill cannot be casted at this zone
197
198         // skill_unit_db.txt
199         uint16 unit_id[2];                                                       ///< Unit ID. @see enum s_skill_unit_id
200         int unit_layout_type[MAX_SKILL_LEVEL];           ///< Layout type. -1 is special layout, others are square with lenght*width: (val*2+1)^2
201         int unit_range[MAX_SKILL_LEVEL];                         ///< Unit cell effect range
202         int16 unit_interval;                                             ///< Interval
203         uint32 unit_target;                                                      ///< Unit target. @see enum e_battle_check_target
204         uint32 unit_flag;                                                        ///< Unit flags. @see enum e_skill_unit_flag
205
206         // skill_cast_db.txt
207         int cast[MAX_SKILL_LEVEL];                               ///< Variable casttime
208 #ifdef RENEWAL_CAST
209         int fixed_cast[MAX_SKILL_LEVEL];                         ///< If -1 means 20% than 'cast'
210 #endif
211         int walkdelay[MAX_SKILL_LEVEL];                  ///< Delay to walk after casting
212         int delay[MAX_SKILL_LEVEL];                              ///< Global delay (delay before reusing all skills)
213         int cooldown[MAX_SKILL_LEVEL];                   ///< Cooldown (delay before reusing same skill)
214         int upkeep_time[MAX_SKILL_LEVEL];                ///< Duration
215         int upkeep_time2[MAX_SKILL_LEVEL];               ///< Duration2
216
217         // skill_require_db.txt
218         struct s_skill_require require;                          ///< Skill requirement
219
220         // skill_nonearnpc_db.txt
221         uint8 unit_nonearnpc_range;     //additional range for UF_NONEARNPC or INF2_NO_NEARNPC [Cydh]
222         uint8 unit_nonearnpc_type;      //type of NPC [Cydh]
223
224         // skill_damage_db.txt
225 #ifdef ADJUST_SKILL_DAMAGE
226         struct s_skill_damage damage;
227 #endif
228
229         // skill_copyable_db.txt
230         struct s_copyable { // [Cydh]
231                 uint8 option;
232                 uint16 joballowed, req_opt;
233         } copyable;
234 };
235 extern struct s_skill_db **skill_db;
236
237 #define MAX_SQUARE_LAYOUT               7       // 15*15 unit placement maximum
238 #define MAX_SKILL_UNIT_LAYOUT   (47+MAX_SQUARE_LAYOUT)  // 47 special ones + the square ones
239 #define MAX_SKILL_UNIT_LAYOUT2  17
240 #define MAX_SKILL_UNIT_COUNT    ((MAX_SQUARE_LAYOUT*2+1)*(MAX_SQUARE_LAYOUT*2+1))
241 struct s_skill_unit_layout {
242         int count;
243         int dx[MAX_SKILL_UNIT_COUNT];
244         int dy[MAX_SKILL_UNIT_COUNT];
245 };
246
247 struct s_skill_nounit_layout {
248         int count;
249         int dx[MAX_SKILL_UNIT_COUNT];
250         int dy[MAX_SKILL_UNIT_COUNT];
251 };
252
253 #define MAX_SKILLTIMERSKILL 50
254 struct skill_timerskill {
255         int timer;
256         int src_id;
257         int target_id;
258         int map;
259         short x,y;
260         uint16 skill_id,skill_lv;
261         int type; // a BF_ type (NOTE: some places use this as general-purpose storage...)
262         int flag;
263 };
264
265 #define MAX_SKILLUNITGROUP 25 /// Maximum skill unit group (for same skill each source)
266 /// Skill unit group
267 struct skill_unit_group {
268         int src_id; /// Caster ID/RID, if player is account_id
269         int party_id; /// Party ID
270         int guild_id; /// Guild ID
271         int bg_id; /// Battleground ID
272         int map; /// Map
273         int target_flag; /// Holds BCT_* flag for battle_check_target
274         int bl_flag; /// Holds BL_* flag for map_foreachin* functions
275         unsigned int tick; /// Tick when skill unit initialized
276         int limit, /// Life time
277                 interval; /// Timer interval
278         uint16 skill_id, /// Skill ID
279                 skill_lv; /// Skill level
280         int val1, val2, val3; /// Values
281         char *valstr; /// String value, used for HT_TALKIEBOX & RG_GRAFFITI
282         int unit_id; /// Unit ID (for client effect)
283         int group_id; /// Skill Group ID
284         int link_group_id; /// Linked group that should be deleted if this one is deleted
285         int unit_count, /// Number of unit at this group
286                 alive_count; /// Number of alive unit
287         int item_id; /// Store item used.
288         struct skill_unit *unit; /// Skill Unit
289         struct {
290                 unsigned ammo_consume : 1; // Need to consume ammo
291                 unsigned song_dance : 2; //0x1 Song/Dance, 0x2 Ensemble
292                 unsigned guildaura : 1; // Guild Aura
293         } state;
294 };
295
296 /// Skill unit
297 struct skill_unit {
298         struct block_list bl;
299         struct skill_unit_group *group; /// Skill group reference
300         int limit;
301         int val1, val2;
302         short range;
303         unsigned alive : 1;
304         unsigned hidden : 1;
305 };
306
307 #define MAX_SKILLUNITGROUPTICKSET 25
308 struct skill_unit_group_tickset {
309         unsigned int tick;
310         int id;
311 };
312
313
314 enum e_skill_unit_flag {
315         UF_DEFNOTENEMY      = 0x00001,  // If 'defunit_not_enemy' is set, the target is changed to 'friend'
316         UF_NOREITERATION    = 0x00002,  // Spell cannot be stacked
317         UF_NOFOOTSET        = 0x00004,  // Spell cannot be cast near/on targets
318         UF_NOOVERLAP        = 0x00008,  // Spell effects do not overlap
319         UF_PATHCHECK        = 0x00010,  // Only cells with a shootable path will be placed
320         UF_NOPC             = 0x00020,  // May not target players
321         UF_NOMOB            = 0x00040,  // May not target mobs
322         UF_SKILL            = 0x00080,  // May target skills
323         UF_DANCE            = 0x00100,  // Dance
324         UF_ENSEMBLE         = 0x00200,  // Duet
325         UF_SONG             = 0x00400,  // Song
326         UF_DUALMODE         = 0x00800,  // Spells should trigger both ontimer and onplace/onout/onleft effects.
327         UF_NOKNOCKBACK      = 0x01000,  // Skill unit cannot be knocked back
328         UF_RANGEDSINGLEUNIT = 0x02000,  // hack for ranged layout, only display center
329         UF_CRAZYWEED_IMMUNE = 0x04000,  // Immune to Crazy Weed removal
330         UF_REM_FIRERAIN     = 0x08000,  // removed by Fire Rain
331         UF_KNOCKBACK_GROUP  = 0x10000,  // knockback skill unit with its group instead of single unit
332         UF_HIDDEN_TRAP      = 0x20000,  // Hidden trap [Cydh]
333 };
334
335 /// Enum for skill_blown
336 enum e_skill_blown      {
337         BLOWN_NONE                                      = 0x00,
338         BLOWN_DONT_SEND_PACKET          = 0x01, // Position update packets must not be sent to the client
339         BLOWN_IGNORE_NO_KNOCKBACK       = 0x02, // Ignores players' special_state.no_knockback
340         // These flags return 'count' instead of 0 if target is cannot be knocked back
341         BLOWN_NO_KNOCKBACK_MAP          = 0x04, // On a WoE/BG map
342         BLOWN_MD_KNOCKBACK_IMMUNE       = 0x08, // If target is MD_KNOCKBACK_IMMUNE
343         BLOWN_TARGET_NO_KNOCKBACK       = 0x10, // If target has 'special_state.no_knockback'
344         BLOWN_TARGET_BASILICA           = 0x20, // If target is in Basilica area
345 };
346
347 /// Create Database item
348 struct s_skill_produce_db {
349         unsigned short nameid; /// Product ID
350         unsigned short req_skill; /// Required Skill
351         unsigned char req_skill_lv, /// Required Skill Level
352                 itemlv; /// Item Level
353         unsigned short mat_id[MAX_PRODUCE_RESOURCE], /// Materials needed
354                 mat_amount[MAX_PRODUCE_RESOURCE]; /// Amount of each materials
355 };
356 extern struct s_skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB];
357
358 /// Creating database arrow
359 struct s_skill_arrow_db {
360         unsigned short nameid, /// Material ID
361                 cre_id[MAX_ARROW_RESULT], /// Arrow created
362                 cre_amount[MAX_ARROW_RESULT]; /// Amount of each arrow created
363 };
364 extern struct s_skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
365
366 /// Abracadabra database
367 struct s_skill_abra_db {
368         uint16 skill_id; /// Skill ID
369         char name[SKILL_NAME_LENGTH]; /// Shouted skill name
370         int per[MAX_SKILL_LEVEL]; /// Probability summoned
371 };
372 extern struct s_skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB];
373 extern unsigned short skill_abra_count;
374
375 void do_init_skill(void);
376 void do_final_skill(void);
377
378 /// Cast type
379 enum { CAST_GROUND, CAST_DAMAGE, CAST_NODAMAGE };
380 /// Returns the cast type of the skill: ground cast, castend damage, castend no damage
381 int skill_get_casttype(uint16 skill_id); //[Skotlex]
382 const char*     skill_get_name( uint16 skill_id );      // [Skotlex]
383 const char*     skill_get_desc( uint16 skill_id );      // [Skotlex]
384 int skill_tree_get_max( uint16 skill_id, int b_class ); // Celest
385
386 // Accessor to the skills database
387 int skill_get_index_( uint16 skill_id, bool silent, const char *func, const char *file, int line );
388 #define skill_get_index(skill_id)  skill_get_index_((skill_id), false, __FUNCTION__, __FILE__, __LINE__) /// Get skill index from skill_id (common usage on source)
389 #define skill_get_index2(skill_id) skill_get_index_((skill_id), true, __FUNCTION__, __FILE__, __LINE__)  /// Get skill index from skill_id (used when reading skill_db files)
390 int skill_get_type( uint16 skill_id );
391 enum e_damage_type skill_get_hit( uint16 skill_id );
392 int skill_get_inf( uint16 skill_id );
393 int skill_get_ele( uint16 skill_id , uint16 skill_lv );
394 int skill_get_nk( uint16 skill_id );
395 int skill_get_max( uint16 skill_id );
396 int skill_get_range( uint16 skill_id , uint16 skill_lv );
397 int skill_get_range2(struct block_list *bl, uint16 skill_id, uint16 skill_lv, bool isServer);
398 int skill_get_splash( uint16 skill_id , uint16 skill_lv );
399 int skill_get_num( uint16 skill_id ,uint16 skill_lv );
400 int skill_get_cast( uint16 skill_id ,uint16 skill_lv );
401 int skill_get_delay( uint16 skill_id ,uint16 skill_lv );
402 int skill_get_walkdelay( uint16 skill_id ,uint16 skill_lv );
403 int skill_get_time( uint16 skill_id ,uint16 skill_lv );
404 int skill_get_time2( uint16 skill_id ,uint16 skill_lv );
405 int skill_get_castnodex( uint16 skill_id );
406 int skill_get_castdef( uint16 skill_id );
407 int skill_get_nocast( uint16 skill_id );
408 int skill_get_unit_id(uint16 skill_id,int flag);
409 int skill_get_inf2( uint16 skill_id );
410 int skill_get_castcancel( uint16 skill_id );
411 int skill_get_maxcount( uint16 skill_id ,uint16 skill_lv );
412 int skill_get_blewcount( uint16 skill_id ,uint16 skill_lv );
413 int skill_get_unit_flag( uint16 skill_id );
414 int skill_get_unit_target( uint16 skill_id );
415 int skill_get_inf3( uint16 skill_id );
416 // Accessor for skill requirements
417 int skill_get_hp( uint16 skill_id ,uint16 skill_lv );
418 int skill_get_mhp( uint16 skill_id ,uint16 skill_lv );
419 int skill_get_sp( uint16 skill_id ,uint16 skill_lv );
420 int skill_get_status_count( uint16 skill_id );
421 int skill_get_hp_rate( uint16 skill_id, uint16 skill_lv );
422 int skill_get_sp_rate( uint16 skill_id, uint16 skill_lv );
423 int skill_get_zeny( uint16 skill_id ,uint16 skill_lv );
424 int skill_get_weapontype( uint16 skill_id );
425 int skill_get_ammotype( uint16 skill_id );
426 int skill_get_ammo_qty( uint16 skill_id, uint16 skill_lv );
427 int skill_get_state(uint16 skill_id);
428 //int skill_get_status( uint16 skill_id, int idx );
429 int skill_get_status_count( uint16 skill_id );
430 int skill_get_spiritball( uint16 skill_id, uint16 skill_lv );
431 int skill_get_itemid( uint16 skill_id, int idx );
432 int skill_get_itemqty( uint16 skill_id, int idx );
433 unsigned short skill_dummy2skill_id(unsigned short skill_id);
434
435 int skill_name2id(const char* name);
436 uint16 skill_idx2id(uint16 idx);
437
438 uint16 SKILL_MAX_DB(void);
439
440 int skill_isammotype(struct map_session_data *sd, unsigned short skill_id);
441 int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data);
442 int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data);
443 int skill_castend_map( struct map_session_data *sd,uint16 skill_id, const char *map);
444
445 int skill_cleartimerskill(struct block_list *src);
446 int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int x,int y,uint16 skill_id,uint16 skill_lv,int type,int flag);
447
448 // Results? Added
449 int skill_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,enum damage_lv dmg_lv,unsigned int tick);
450 int skill_counter_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,unsigned int tick);
451 short skill_blown(struct block_list* src, struct block_list* target, char count, int8 dir, enum e_skill_blown flag);
452 int skill_break_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int flag);
453 int skill_strip_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int lv, int time);
454 // Skills unit
455 struct skill_unit_group *skill_id2group(int group_id);
456 struct skill_unit_group *skill_unitsetting(struct block_list* src, uint16 skill_id, uint16 skill_lv, int16 x, int16 y, int flag);
457 struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int x, int y, int val1, int val2, bool hidden);
458 int skill_delunit(struct skill_unit *unit);
459 struct skill_unit_group *skill_initunitgroup(struct block_list* src, int count, uint16 skill_id, uint16 skill_lv, int unit_id, int limit, int interval);
460 int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int line, const char* func);
461 #define skill_delunitgroup(group) skill_delunitgroup_(group,__FILE__,__LINE__,__func__)
462 void skill_clear_unitgroup(struct block_list *src);
463 int skill_clear_group(struct block_list *bl, int flag);
464 void ext_skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, unsigned int tick);
465 int64 skill_unit_ondamaged(struct skill_unit *unit,int64 damage);
466
467 // Skill unit visibility [Cydh]
468 void skill_getareachar_skillunit_visibilty(struct skill_unit *su, enum send_target target);
469 void skill_getareachar_skillunit_visibilty_single(struct skill_unit *su, struct block_list *bl);
470
471 int skill_castfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv);
472 int skill_castfix_sc(struct block_list *bl, double time, uint8 flag);
473 #ifdef RENEWAL_CAST
474 int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, uint16 skill_lv);
475 #endif
476 int skill_delayfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv);
477 void skill_toggle_magicpower(struct block_list *bl, uint16 skill_id);
478
479 // Skill conditions check and remove [Inkfish]
480 bool skill_check_condition_castbegin(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
481 bool skill_check_condition_castend(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
482 int skill_check_condition_char_sub (struct block_list *bl, va_list ap);
483 void skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type);
484 struct skill_condition skill_get_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
485 int skill_disable_check(struct status_change *sc, uint16 skill_id);
486
487 int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, uint16 *skill_lv, int range, int cast_flag);
488 int skill_unit_move(struct block_list *bl,unsigned int tick,int flag);
489 void skill_unit_move_unit_group( struct skill_unit_group *group, int16 m,int16 dx,int16 dy);
490 void skill_unit_move_unit(struct block_list *bl, int dx, int dy);
491
492 int skill_sit (struct map_session_data *sd, int type);
493 void skill_repairweapon(struct map_session_data *sd, int idx);
494 void skill_identify(struct map_session_data *sd,int idx);
495 void skill_weaponrefine(struct map_session_data *sd,int idx); // [Celest]
496 int skill_autospell(struct map_session_data *md,uint16 skill_id);
497
498 int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv, bool heal);
499
500 bool skill_check_cloaking(struct block_list *bl, struct status_change_entry *sce);
501
502 // Abnormal status
503 void skill_enchant_elemental_end(struct block_list *bl, int type);
504 bool skill_isNotOk(uint16 skill_id, struct map_session_data *sd);
505 bool skill_isNotOk_hom(struct homun_data *hd, uint16 skill_id, uint16 skill_lv);
506 bool skill_isNotOk_mercenary(uint16 skill_id, struct mercenary_data *md);
507
508 bool skill_isNotOk_npcRange(struct block_list *src, uint16 skill_id, uint16 skill_lv, int pos_x, int pos_y);
509
510 // Item creation
511 short skill_can_produce_mix( struct map_session_data *sd, unsigned short nameid, int trigger, int qty);
512 bool skill_produce_mix( struct map_session_data *sd, uint16 skill_id, unsigned short nameid, int slot1, int slot2, int slot3, int qty, short produce_idx );
513
514 bool skill_arrow_create( struct map_session_data *sd, unsigned short nameid);
515
516 // skills for the mob
517 int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag );
518 int skill_castend_damage_id( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag );
519 int skill_castend_pos2( struct block_list *src, int x,int y,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag);
520
521 int skill_blockpc_start(struct map_session_data*, int, int);
522 int skill_blockpc_get(struct map_session_data *sd, int skillid);
523 int skill_blockpc_clear(struct map_session_data *sd);
524 int skill_blockpc_end(int tid, unsigned int tick, int id, intptr_t data);
525 int skill_blockhomun_start (struct homun_data*,uint16 skill_id,int);
526 int skill_blockmerc_start (struct mercenary_data*,uint16 skill_id,int);
527
528
529 // (Epoque:) To-do: replace this macro with some sort of skill tree check (rather than hard-coded skill names)
530 #define skill_ischangesex(id) ( \
531         ((id) >= BD_ADAPTATION     && (id) <= DC_SERVICEFORYOU) || ((id) >= CG_ARROWVULCAN && (id) <= CG_MARIONETTE) || \
532         ((id) >= CG_LONGINGFREEDOM && (id) <= CG_TAROTCARD)     || ((id) >= WA_SWING_DANCE && (id) <= WM_UNLIMITED_HUMMING_VOICE))
533
534 // Skill action, (return dmg,heal)
535 int64 skill_attack( int attack_type, struct block_list* src, struct block_list *dsrc,struct block_list *bl,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag );
536
537 void skill_reload(void);
538
539 /// List of State Requirements
540 enum e_require_state {
541         ST_NONE,
542         ST_HIDDEN,
543         ST_RIDING,
544         ST_FALCON,
545         ST_CART,
546         ST_SHIELD,
547         ST_RECOV_WEIGHT_RATE,
548         ST_MOVE_ENABLE,
549         ST_WATER,
550         ST_RIDINGDRAGON,
551         ST_WUG,
552         ST_RIDINGWUG,
553         ST_MADO,
554         ST_ELEMENTALSPIRIT,
555         ST_ELEMENTALSPIRIT2,
556         ST_PECO,
557 };
558
559 /// List of Skills
560 enum e_skill {
561         NV_BASIC = 1,
562
563         SM_SWORD,
564         SM_TWOHAND,
565         SM_RECOVERY,
566         SM_BASH,
567         SM_PROVOKE,
568         SM_MAGNUM,
569         SM_ENDURE,
570
571         MG_SRECOVERY,
572         MG_SIGHT,
573         MG_NAPALMBEAT,
574         MG_SAFETYWALL,
575         MG_SOULSTRIKE,
576         MG_COLDBOLT,
577         MG_FROSTDIVER,
578         MG_STONECURSE,
579         MG_FIREBALL,
580         MG_FIREWALL,
581         MG_FIREBOLT,
582         MG_LIGHTNINGBOLT,
583         MG_THUNDERSTORM,
584
585         AL_DP,
586         AL_DEMONBANE,
587         AL_RUWACH,
588         AL_PNEUMA,
589         AL_TELEPORT,
590         AL_WARP,
591         AL_HEAL,
592         AL_INCAGI,
593         AL_DECAGI,
594         AL_HOLYWATER,
595         AL_CRUCIS,
596         AL_ANGELUS,
597         AL_BLESSING,
598         AL_CURE,
599
600         MC_INCCARRY,
601         MC_DISCOUNT,
602         MC_OVERCHARGE,
603         MC_PUSHCART,
604         MC_IDENTIFY,
605         MC_VENDING,
606         MC_MAMMONITE,
607
608         AC_OWL,
609         AC_VULTURE,
610         AC_CONCENTRATION,
611         AC_DOUBLE,
612         AC_SHOWER,
613
614         TF_DOUBLE,
615         TF_MISS,
616         TF_STEAL,
617         TF_HIDING,
618         TF_POISON,
619         TF_DETOXIFY,
620
621         ALL_RESURRECTION,
622
623         KN_SPEARMASTERY,
624         KN_PIERCE,
625         KN_BRANDISHSPEAR,
626         KN_SPEARSTAB,
627         KN_SPEARBOOMERANG,
628         KN_TWOHANDQUICKEN,
629         KN_AUTOCOUNTER,
630         KN_BOWLINGBASH,
631         KN_RIDING,
632         KN_CAVALIERMASTERY,
633
634         PR_MACEMASTERY,
635         PR_IMPOSITIO,
636         PR_SUFFRAGIUM,
637         PR_ASPERSIO,
638         PR_BENEDICTIO,
639         PR_SANCTUARY,
640         PR_SLOWPOISON,
641         PR_STRECOVERY,
642         PR_KYRIE,
643         PR_MAGNIFICAT,
644         PR_GLORIA,
645         PR_LEXDIVINA,
646         PR_TURNUNDEAD,
647         PR_LEXAETERNA,
648         PR_MAGNUS,
649
650         WZ_FIREPILLAR,
651         WZ_SIGHTRASHER,
652         WZ_FIREIVY,
653         WZ_METEOR,
654         WZ_JUPITEL,
655         WZ_VERMILION,
656         WZ_WATERBALL,
657         WZ_ICEWALL,
658         WZ_FROSTNOVA,
659         WZ_STORMGUST,
660         WZ_EARTHSPIKE,
661         WZ_HEAVENDRIVE,
662         WZ_QUAGMIRE,
663         WZ_ESTIMATION,
664
665         BS_IRON,
666         BS_STEEL,
667         BS_ENCHANTEDSTONE,
668         BS_ORIDEOCON,
669         BS_DAGGER,
670         BS_SWORD,
671         BS_TWOHANDSWORD,
672         BS_AXE,
673         BS_MACE,
674         BS_KNUCKLE,
675         BS_SPEAR,
676         BS_HILTBINDING,
677         BS_FINDINGORE,
678         BS_WEAPONRESEARCH,
679         BS_REPAIRWEAPON,
680         BS_SKINTEMPER,
681         BS_HAMMERFALL,
682         BS_ADRENALINE,
683         BS_WEAPONPERFECT,
684         BS_OVERTHRUST,
685         BS_MAXIMIZE,
686
687         HT_SKIDTRAP,
688         HT_LANDMINE,
689         HT_ANKLESNARE,
690         HT_SHOCKWAVE,
691         HT_SANDMAN,
692         HT_FLASHER,
693         HT_FREEZINGTRAP,
694         HT_BLASTMINE,
695         HT_CLAYMORETRAP,
696         HT_REMOVETRAP,
697         HT_TALKIEBOX,
698         HT_BEASTBANE,
699         HT_FALCON,
700         HT_STEELCROW,
701         HT_BLITZBEAT,
702         HT_DETECTING,
703         HT_SPRINGTRAP,
704
705         AS_RIGHT,
706         AS_LEFT,
707         AS_KATAR,
708         AS_CLOAKING,
709         AS_SONICBLOW,
710         AS_GRIMTOOTH,
711         AS_ENCHANTPOISON,
712         AS_POISONREACT,
713         AS_VENOMDUST,
714         AS_SPLASHER,
715
716         NV_FIRSTAID,
717         NV_TRICKDEAD,
718         SM_MOVINGRECOVERY,
719         SM_FATALBLOW,
720         SM_AUTOBERSERK,
721         AC_MAKINGARROW,
722         AC_CHARGEARROW,
723         TF_SPRINKLESAND,
724         TF_BACKSLIDING,
725         TF_PICKSTONE,
726         TF_THROWSTONE,
727         MC_CARTREVOLUTION,
728         MC_CHANGECART,
729         MC_LOUD,
730         AL_HOLYLIGHT,
731         MG_ENERGYCOAT,
732
733         NPC_PIERCINGATT,
734         NPC_MENTALBREAKER,
735         NPC_RANGEATTACK,
736         NPC_ATTRICHANGE,
737         NPC_CHANGEWATER,
738         NPC_CHANGEGROUND,
739         NPC_CHANGEFIRE,
740         NPC_CHANGEWIND,
741         NPC_CHANGEPOISON,
742         NPC_CHANGEHOLY,
743         NPC_CHANGEDARKNESS,
744         NPC_CHANGETELEKINESIS,
745         NPC_CRITICALSLASH,
746         NPC_COMBOATTACK,
747         NPC_GUIDEDATTACK,
748         NPC_SELFDESTRUCTION,
749         NPC_SPLASHATTACK,
750         NPC_SUICIDE,
751         NPC_POISON,
752         NPC_BLINDATTACK,
753         NPC_SILENCEATTACK,
754         NPC_STUNATTACK,
755         NPC_PETRIFYATTACK,
756         NPC_CURSEATTACK,
757         NPC_SLEEPATTACK,
758         NPC_RANDOMATTACK,
759         NPC_WATERATTACK,
760         NPC_GROUNDATTACK,
761         NPC_FIREATTACK,
762         NPC_WINDATTACK,
763         NPC_POISONATTACK,
764         NPC_HOLYATTACK,
765         NPC_DARKNESSATTACK,
766         NPC_TELEKINESISATTACK,
767         NPC_MAGICALATTACK,
768         NPC_METAMORPHOSIS,
769         NPC_PROVOCATION,
770         NPC_SMOKING,
771         NPC_SUMMONSLAVE,
772         NPC_EMOTION,
773         NPC_TRANSFORMATION,
774         NPC_BLOODDRAIN,
775         NPC_ENERGYDRAIN,
776         NPC_KEEPING,
777         NPC_DARKBREATH,
778         NPC_DARKBLESSING,
779         NPC_BARRIER,
780         NPC_DEFENDER,
781         NPC_LICK,
782         NPC_HALLUCINATION,
783         NPC_REBIRTH,
784         NPC_SUMMONMONSTER,
785
786         RG_SNATCHER,
787         RG_STEALCOIN,
788         RG_BACKSTAP,
789         RG_TUNNELDRIVE,
790         RG_RAID,
791         RG_STRIPWEAPON,
792         RG_STRIPSHIELD,
793         RG_STRIPARMOR,
794         RG_STRIPHELM,
795         RG_INTIMIDATE,
796         RG_GRAFFITI,
797         RG_FLAGGRAFFITI,
798         RG_CLEANER,
799         RG_GANGSTER,
800         RG_COMPULSION,
801         RG_PLAGIARISM,
802
803         AM_AXEMASTERY,
804         AM_LEARNINGPOTION,
805         AM_PHARMACY,
806         AM_DEMONSTRATION,
807         AM_ACIDTERROR,
808         AM_POTIONPITCHER,
809         AM_CANNIBALIZE,
810         AM_SPHEREMINE,
811         AM_CP_WEAPON,
812         AM_CP_SHIELD,
813         AM_CP_ARMOR,
814         AM_CP_HELM,
815         AM_BIOETHICS,
816         AM_BIOTECHNOLOGY,
817         AM_CREATECREATURE,
818         AM_CULTIVATION,
819         AM_FLAMECONTROL,
820         AM_CALLHOMUN,
821         AM_REST,
822         AM_DRILLMASTER,
823         AM_HEALHOMUN,
824         AM_RESURRECTHOMUN,
825
826         CR_TRUST,
827         CR_AUTOGUARD,
828         CR_SHIELDCHARGE,
829         CR_SHIELDBOOMERANG,
830         CR_REFLECTSHIELD,
831         CR_HOLYCROSS,
832         CR_GRANDCROSS,
833         CR_DEVOTION,
834         CR_PROVIDENCE,
835         CR_DEFENDER,
836         CR_SPEARQUICKEN,
837
838         MO_IRONHAND,
839         MO_SPIRITSRECOVERY,
840         MO_CALLSPIRITS,
841         MO_ABSORBSPIRITS,
842         MO_TRIPLEATTACK,
843         MO_BODYRELOCATION,
844         MO_DODGE,
845         MO_INVESTIGATE,
846         MO_FINGEROFFENSIVE,
847         MO_STEELBODY,
848         MO_BLADESTOP,
849         MO_EXPLOSIONSPIRITS,
850         MO_EXTREMITYFIST,
851         MO_CHAINCOMBO,
852         MO_COMBOFINISH,
853
854         SA_ADVANCEDBOOK,
855         SA_CASTCANCEL,
856         SA_MAGICROD,
857         SA_SPELLBREAKER,
858         SA_FREECAST,
859         SA_AUTOSPELL,
860         SA_FLAMELAUNCHER,
861         SA_FROSTWEAPON,
862         SA_LIGHTNINGLOADER,
863         SA_SEISMICWEAPON,
864         SA_DRAGONOLOGY,
865         SA_VOLCANO,
866         SA_DELUGE,
867         SA_VIOLENTGALE,
868         SA_LANDPROTECTOR,
869         SA_DISPELL,
870         SA_ABRACADABRA,
871         SA_MONOCELL,
872         SA_CLASSCHANGE,
873         SA_SUMMONMONSTER,
874         SA_REVERSEORCISH,
875         SA_DEATH,
876         SA_FORTUNE,
877         SA_TAMINGMONSTER,
878         SA_QUESTION,
879         SA_GRAVITY,
880         SA_LEVELUP,
881         SA_INSTANTDEATH,
882         SA_FULLRECOVERY,
883         SA_COMA,
884
885         BD_ADAPTATION,
886         BD_ENCORE,
887         BD_LULLABY,
888         BD_RICHMANKIM,
889         BD_ETERNALCHAOS,
890         BD_DRUMBATTLEFIELD,
891         BD_RINGNIBELUNGEN,
892         BD_ROKISWEIL,
893         BD_INTOABYSS,
894         BD_SIEGFRIED,
895         BD_RAGNAROK,
896
897         BA_MUSICALLESSON,
898         BA_MUSICALSTRIKE,
899         BA_DISSONANCE,
900         BA_FROSTJOKER,
901         BA_WHISTLE,
902         BA_ASSASSINCROSS,
903         BA_POEMBRAGI,
904         BA_APPLEIDUN,
905
906         DC_DANCINGLESSON,
907         DC_THROWARROW,
908         DC_UGLYDANCE,
909         DC_SCREAM,
910         DC_HUMMING,
911         DC_DONTFORGETME,
912         DC_FORTUNEKISS,
913         DC_SERVICEFORYOU,
914
915         NPC_RANDOMMOVE,
916         NPC_SPEEDUP,
917         NPC_REVENGE,
918
919         WE_MALE,
920         WE_FEMALE,
921         WE_CALLPARTNER,
922
923         ITM_TOMAHAWK,
924
925         NPC_DARKCROSS,
926         NPC_GRANDDARKNESS,
927         NPC_DARKSTRIKE,
928         NPC_DARKTHUNDER,
929         NPC_STOP,
930         NPC_WEAPONBRAKER,
931         NPC_ARMORBRAKE,
932         NPC_HELMBRAKE,
933         NPC_SHIELDBRAKE,
934         NPC_UNDEADATTACK,
935         NPC_CHANGEUNDEAD,
936         NPC_POWERUP,
937         NPC_AGIUP,
938         NPC_SIEGEMODE,
939         NPC_CALLSLAVE,
940         NPC_INVISIBLE,
941         NPC_RUN,
942
943         LK_AURABLADE,
944         LK_PARRYING,
945         LK_CONCENTRATION,
946         LK_TENSIONRELAX,
947         LK_BERSERK,
948         LK_FURY,
949         HP_ASSUMPTIO,
950         HP_BASILICA,
951         HP_MEDITATIO,
952         HW_SOULDRAIN,
953         HW_MAGICCRASHER,
954         HW_MAGICPOWER,
955         PA_PRESSURE,
956         PA_SACRIFICE,
957         PA_GOSPEL,
958         CH_PALMSTRIKE,
959         CH_TIGERFIST,
960         CH_CHAINCRUSH,
961         PF_HPCONVERSION,
962         PF_SOULCHANGE,
963         PF_SOULBURN,
964         ASC_KATAR,
965         ASC_HALLUCINATION,
966         ASC_EDP,
967         ASC_BREAKER,
968         SN_SIGHT,
969         SN_FALCONASSAULT,
970         SN_SHARPSHOOTING,
971         SN_WINDWALK,
972         WS_MELTDOWN,
973         WS_CREATECOIN,
974         WS_CREATENUGGET,
975         WS_CARTBOOST,
976         WS_SYSTEMCREATE,
977         ST_CHASEWALK,
978         ST_REJECTSWORD,
979         ST_STEALBACKPACK,
980         CR_ALCHEMY,
981         CR_SYNTHESISPOTION,
982         CG_ARROWVULCAN,
983         CG_MOONLIT,
984         CG_MARIONETTE,
985         LK_SPIRALPIERCE,
986         LK_HEADCRUSH,
987         LK_JOINTBEAT,
988         HW_NAPALMVULCAN,
989         CH_SOULCOLLECT,
990         PF_MINDBREAKER,
991         PF_MEMORIZE,
992         PF_FOGWALL,
993         PF_SPIDERWEB,
994         ASC_METEORASSAULT,
995         ASC_CDP,
996         WE_BABY,
997         WE_CALLPARENT,
998         WE_CALLBABY,
999
1000         TK_RUN,
1001         TK_READYSTORM,
1002         TK_STORMKICK,
1003         TK_READYDOWN,
1004         TK_DOWNKICK,
1005         TK_READYTURN,
1006         TK_TURNKICK,
1007         TK_READYCOUNTER,
1008         TK_COUNTER,
1009         TK_DODGE,
1010         TK_JUMPKICK,
1011         TK_HPTIME,
1012         TK_SPTIME,
1013         TK_POWER,
1014         TK_SEVENWIND,
1015         TK_HIGHJUMP,
1016
1017         SG_FEEL,
1018         SG_SUN_WARM,
1019         SG_MOON_WARM,
1020         SG_STAR_WARM,
1021         SG_SUN_COMFORT,
1022         SG_MOON_COMFORT,
1023         SG_STAR_COMFORT,
1024         SG_HATE,
1025         SG_SUN_ANGER,
1026         SG_MOON_ANGER,
1027         SG_STAR_ANGER,
1028         SG_SUN_BLESS,
1029         SG_MOON_BLESS,
1030         SG_STAR_BLESS,
1031         SG_DEVIL,
1032         SG_FRIEND,
1033         SG_KNOWLEDGE,
1034         SG_FUSION,
1035
1036         SL_ALCHEMIST,
1037         AM_BERSERKPITCHER,
1038         SL_MONK,
1039         SL_STAR,
1040         SL_SAGE,
1041         SL_CRUSADER,
1042         SL_SUPERNOVICE,
1043         SL_KNIGHT,
1044         SL_WIZARD,
1045         SL_PRIEST,
1046         SL_BARDDANCER,
1047         SL_ROGUE,
1048         SL_ASSASIN,
1049         SL_BLACKSMITH,
1050         BS_ADRENALINE2,
1051         SL_HUNTER,
1052         SL_SOULLINKER,
1053         SL_KAIZEL,
1054         SL_KAAHI,
1055         SL_KAUPE,
1056         SL_KAITE,
1057         SL_KAINA,
1058         SL_STIN,
1059         SL_STUN,
1060         SL_SMA,
1061         SL_SWOO,
1062         SL_SKE,
1063         SL_SKA,
1064
1065         SM_SELFPROVOKE,
1066         NPC_EMOTION_ON,
1067         ST_PRESERVE,
1068         ST_FULLSTRIP,
1069         WS_WEAPONREFINE,
1070         CR_SLIMPITCHER,
1071         CR_FULLPROTECTION,
1072         PA_SHIELDCHAIN,
1073         HP_MANARECHARGE,
1074         PF_DOUBLECASTING,
1075         HW_GANBANTEIN,
1076         HW_GRAVITATION,
1077         WS_CARTTERMINATION,
1078         WS_OVERTHRUSTMAX,
1079         CG_LONGINGFREEDOM,
1080         CG_HERMODE,
1081         CG_TAROTCARD,
1082         CR_ACIDDEMONSTRATION,
1083         CR_CULTIVATION,
1084         ITEM_ENCHANTARMS,
1085         TK_MISSION,
1086         SL_HIGH,
1087         KN_ONEHAND,
1088         AM_TWILIGHT1,
1089         AM_TWILIGHT2,
1090         AM_TWILIGHT3,
1091         HT_POWER,
1092
1093         GS_GLITTERING,
1094         GS_FLING,
1095         GS_TRIPLEACTION,
1096         GS_BULLSEYE,
1097         GS_MADNESSCANCEL,
1098         GS_ADJUSTMENT,
1099         GS_INCREASING,
1100         GS_MAGICALBULLET,
1101         GS_CRACKER,
1102         GS_SINGLEACTION,
1103         GS_SNAKEEYE,
1104         GS_CHAINACTION,
1105         GS_TRACKING,
1106         GS_DISARM,
1107         GS_PIERCINGSHOT,
1108         GS_RAPIDSHOWER,
1109         GS_DESPERADO,
1110         GS_GATLINGFEVER,
1111         GS_DUST,
1112         GS_FULLBUSTER,
1113         GS_SPREADATTACK,
1114         GS_GROUNDDRIFT,
1115
1116         NJ_TOBIDOUGU,
1117         NJ_SYURIKEN,
1118         NJ_KUNAI,
1119         NJ_HUUMA,
1120         NJ_ZENYNAGE,
1121         NJ_TATAMIGAESHI,
1122         NJ_KASUMIKIRI,
1123         NJ_SHADOWJUMP,
1124         NJ_KIRIKAGE,
1125         NJ_UTSUSEMI,
1126         NJ_BUNSINJYUTSU,
1127         NJ_NINPOU,
1128         NJ_KOUENKA,
1129         NJ_KAENSIN,
1130         NJ_BAKUENRYU,
1131         NJ_HYOUSENSOU,
1132         NJ_SUITON,
1133         NJ_HYOUSYOURAKU,
1134         NJ_HUUJIN,
1135         NJ_RAIGEKISAI,
1136         NJ_KAMAITACHI,
1137         NJ_NEN,
1138         NJ_ISSEN,
1139
1140         MB_FIGHTING,
1141         MB_NEUTRAL,
1142         MB_TAIMING_PUTI,
1143         MB_WHITEPOTION,
1144         MB_MENTAL,
1145         MB_CARDPITCHER,
1146         MB_PETPITCHER,
1147         MB_BODYSTUDY,
1148         MB_BODYALTER,
1149         MB_PETMEMORY,
1150         MB_M_TELEPORT,
1151         MB_B_GAIN,
1152         MB_M_GAIN,
1153         MB_MISSION,
1154         MB_MUNAKKNOWLEDGE,
1155         MB_MUNAKBALL,
1156         MB_SCROLL,
1157         MB_B_GATHERING,
1158         MB_M_GATHERING,
1159         MB_B_EXCLUDE,
1160         MB_B_DRIFT,
1161         MB_B_WALLRUSH,
1162         MB_M_WALLRUSH,
1163         MB_B_WALLSHIFT,
1164         MB_M_WALLCRASH,
1165         MB_M_REINCARNATION,
1166         MB_B_EQUIP,
1167
1168         SL_DEATHKNIGHT,
1169         SL_COLLECTOR,
1170         SL_NINJA,
1171         SL_GUNNER,
1172         AM_TWILIGHT4,
1173         DA_RESET,
1174         DE_BERSERKAIZER,
1175         DA_DARKPOWER,
1176
1177         DE_PASSIVE,
1178         DE_PATTACK,
1179         DE_PSPEED,
1180         DE_PDEFENSE,
1181         DE_PCRITICAL,
1182         DE_PHP,
1183         DE_PSP,
1184         DE_RESET,
1185         DE_RANKING,
1186         DE_PTRIPLE,
1187         DE_ENERGY,
1188         DE_NIGHTMARE,
1189         DE_SLASH,
1190         DE_COIL,
1191         DE_WAVE,
1192         DE_REBIRTH,
1193         DE_AURA,
1194         DE_FREEZER,
1195         DE_CHANGEATTACK,
1196         DE_PUNISH,
1197         DE_POISON,
1198         DE_INSTANT,
1199         DE_WARNING,
1200         DE_RANKEDKNIFE,
1201         DE_RANKEDGRADIUS,
1202         DE_GAUGE,
1203         DE_GTIME,
1204         DE_GPAIN,
1205         DE_GSKILL,
1206         DE_GKILL,
1207         DE_ACCEL,
1208         DE_BLOCKDOUBLE,
1209         DE_BLOCKMELEE,
1210         DE_BLOCKFAR,
1211         DE_FRONTATTACK,
1212         DE_DANGERATTACK,
1213         DE_TWINATTACK,
1214         DE_WINDATTACK,
1215         DE_WATERATTACK,
1216
1217         DA_ENERGY,
1218         DA_CLOUD,
1219         DA_FIRSTSLOT,
1220         DA_HEADDEF,
1221         DA_SPACE,
1222         DA_TRANSFORM,
1223         DA_EXPLOSION,
1224         DA_REWARD,
1225         DA_CRUSH,
1226         DA_ITEMREBUILD,
1227         DA_ILLUSION,
1228         DA_NUETRALIZE,
1229         DA_RUNNER,
1230         DA_TRANSFER,
1231         DA_WALL,
1232         DA_ZENY,
1233         DA_REVENGE,
1234         DA_EARPLUG,
1235         DA_CONTRACT,
1236         DA_BLACK,
1237         DA_DREAM,
1238         DA_MAGICCART,
1239         DA_COPY,
1240         DA_CRYSTAL,
1241         DA_EXP,
1242         DA_CARTSWING,
1243         DA_REBUILD,
1244         DA_JOBCHANGE,
1245         DA_EDARKNESS,
1246         DA_EGUARDIAN,
1247         DA_TIMEOUT,
1248         ALL_TIMEIN,
1249         DA_ZENYRANK,
1250         DA_ACCESSORYMIX,
1251
1252         NPC_EARTHQUAKE,
1253         NPC_FIREBREATH,
1254         NPC_ICEBREATH,
1255         NPC_THUNDERBREATH,
1256         NPC_ACIDBREATH,
1257         NPC_DARKNESSBREATH,
1258         NPC_DRAGONFEAR,
1259         NPC_BLEEDING,
1260         NPC_PULSESTRIKE,
1261         NPC_HELLJUDGEMENT,
1262         NPC_WIDESILENCE,
1263         NPC_WIDEFREEZE,
1264         NPC_WIDEBLEEDING,
1265         NPC_WIDESTONE,
1266         NPC_WIDECONFUSE,
1267         NPC_WIDESLEEP,
1268         NPC_WIDESIGHT,
1269         NPC_EVILLAND,
1270         NPC_MAGICMIRROR,
1271         NPC_SLOWCAST,
1272         NPC_CRITICALWOUND,
1273         NPC_EXPULSION,
1274         NPC_STONESKIN,
1275         NPC_ANTIMAGIC,
1276         NPC_WIDECURSE,
1277         NPC_WIDESTUN,
1278         NPC_VAMPIRE_GIFT,
1279         NPC_WIDESOULDRAIN,
1280
1281         ALL_INCCARRY,
1282         NPC_TALK,
1283         NPC_HELLPOWER,
1284         NPC_WIDEHELLDIGNITY,
1285         NPC_INVINCIBLE,
1286         NPC_INVINCIBLEOFF,
1287         NPC_ALLHEAL,
1288         GM_SANDMAN,
1289         CASH_BLESSING,
1290         CASH_INCAGI,
1291         CASH_ASSUMPTIO,
1292         ALL_CATCRY,
1293         ALL_PARTYFLEE,
1294         ALL_ANGEL_PROTECT,
1295         ALL_DREAM_SUMMERNIGHT,
1296         NPC_CHANGEUNDEAD2,
1297         ALL_REVERSEORCISH,
1298         ALL_WEWISH,
1299         ALL_SONKRAN,
1300         NPC_WIDEHEALTHFEAR,
1301         NPC_WIDEBODYBURNNING,
1302         NPC_WIDEFROSTMISTY,
1303         NPC_WIDECOLD,
1304         NPC_WIDE_DEEP_SLEEP,
1305         NPC_WIDESIREN,
1306         NPC_VENOMFOG,
1307         NPC_MILLENNIUMSHIELD,
1308         NPC_COMET,
1309         NPC_ICEMINE,
1310         NPC_ICEEXPLO,
1311         NPC_FLAMECROSS,
1312         NPC_PULSESTRIKE2,
1313         NPC_DANCINGBLADE,
1314         NPC_DANCINGBLADE_ATK,
1315         NPC_DARKPIERCING,
1316         NPC_MAXPAIN,
1317         NPC_MAXPAIN_ATK,
1318         NPC_DEATHSUMMON,
1319         NPC_HELLBURNING,
1320         NPC_JACKFROST,
1321         NPC_WIDEWEB,
1322         NPC_WIDESUCK,
1323         NPC_STORMGUST2,
1324         NPC_FIRESTORM,
1325         NPC_REVERBERATION,
1326         NPC_REVERBERATION_ATK,
1327         NPC_LEX_AETERNA,
1328         NPC_ARROWSTORM,
1329         NPC_CHEAL,
1330         NPC_SR_CURSEDCIRCLE,
1331         NPC_DRAGONBREATH,
1332         NPC_FATALMENACE,
1333         NPC_MAGMA_ERUPTION,
1334         NPC_MAGMA_ERUPTION_DOTDAMAGE,
1335         NPC_MANDRAGORA,
1336         NPC_PSYCHIC_WAVE,
1337         NPC_RAYOFGENESIS,
1338         NPC_VENOMIMPRESS,
1339         NPC_CLOUD_KILL,
1340         NPC_IGNITIONBREAK,
1341         NPC_PHANTOMTHRUST,
1342         NPC_POISON_BUSTER,
1343         NPC_HALLUCINATIONWALK,
1344         NPC_ELECTRICWALK,
1345         NPC_FIREWALK,
1346         NPC_WIDEDISPEL,
1347         NPC_LEASH,
1348         NPC_WIDELEASH,
1349         NPC_WIDECRITICALWOUND,
1350
1351         KN_CHARGEATK = 1001,
1352         CR_SHRINK,
1353         AS_SONICACCEL,
1354         AS_VENOMKNIFE,
1355         RG_CLOSECONFINE,
1356         WZ_SIGHTBLASTER,
1357         SA_CREATECON,
1358         SA_ELEMENTWATER,
1359         HT_PHANTASMIC,
1360         BA_PANGVOICE,
1361         DC_WINKCHARM,
1362         BS_UNFAIRLYTRICK,
1363         BS_GREED,
1364         PR_REDEMPTIO,
1365         MO_KITRANSLATION,
1366         MO_BALKYOUNG,
1367         SA_ELEMENTGROUND,
1368         SA_ELEMENTFIRE,
1369         SA_ELEMENTWIND,
1370
1371         RK_ENCHANTBLADE = 2001,
1372         RK_SONICWAVE,
1373         RK_DEATHBOUND,
1374         RK_HUNDREDSPEAR,
1375         RK_WINDCUTTER,
1376         RK_IGNITIONBREAK,
1377         RK_DRAGONTRAINING,
1378         RK_DRAGONBREATH,
1379         RK_DRAGONHOWLING,
1380         RK_RUNEMASTERY,
1381         RK_MILLENNIUMSHIELD,
1382         RK_CRUSHSTRIKE,
1383         RK_REFRESH,
1384         RK_GIANTGROWTH,
1385         RK_STONEHARDSKIN,
1386         RK_VITALITYACTIVATION,
1387         RK_STORMBLAST,
1388         RK_FIGHTINGSPIRIT,
1389         RK_ABUNDANCE,
1390         RK_PHANTOMTHRUST,
1391
1392         GC_VENOMIMPRESS,
1393         GC_CROSSIMPACT,
1394         GC_DARKILLUSION,
1395         GC_RESEARCHNEWPOISON,
1396         GC_CREATENEWPOISON,
1397         GC_ANTIDOTE,
1398         GC_POISONINGWEAPON,
1399         GC_WEAPONBLOCKING,
1400         GC_COUNTERSLASH,
1401         GC_WEAPONCRUSH,
1402         GC_VENOMPRESSURE,
1403         GC_POISONSMOKE,
1404         GC_CLOAKINGEXCEED,
1405         GC_PHANTOMMENACE,
1406         GC_HALLUCINATIONWALK,
1407         GC_ROLLINGCUTTER,
1408         GC_CROSSRIPPERSLASHER,
1409
1410         AB_JUDEX,
1411         AB_ANCILLA,
1412         AB_ADORAMUS,
1413         AB_CLEMENTIA,
1414         AB_CANTO,
1415         AB_CHEAL,
1416         AB_EPICLESIS,
1417         AB_PRAEFATIO,
1418         AB_ORATIO,
1419         AB_LAUDAAGNUS,
1420         AB_LAUDARAMUS,
1421         AB_EUCHARISTICA,
1422         AB_RENOVATIO,
1423         AB_HIGHNESSHEAL,
1424         AB_CLEARANCE,
1425         AB_EXPIATIO,
1426         AB_DUPLELIGHT,
1427         AB_DUPLELIGHT_MELEE,
1428         AB_DUPLELIGHT_MAGIC,
1429         AB_SILENTIUM,
1430
1431         WL_WHITEIMPRISON = 2201,
1432         WL_SOULEXPANSION,
1433         WL_FROSTMISTY,
1434         WL_JACKFROST,
1435         WL_MARSHOFABYSS,
1436         WL_RECOGNIZEDSPELL,
1437         WL_SIENNAEXECRATE,
1438         WL_RADIUS,
1439         WL_STASIS,
1440         WL_DRAINLIFE,
1441         WL_CRIMSONROCK,
1442         WL_HELLINFERNO,
1443         WL_COMET,
1444         WL_CHAINLIGHTNING,
1445         WL_CHAINLIGHTNING_ATK,
1446         WL_EARTHSTRAIN,
1447         WL_TETRAVORTEX,
1448         WL_TETRAVORTEX_FIRE,
1449         WL_TETRAVORTEX_WATER,
1450         WL_TETRAVORTEX_WIND,
1451         WL_TETRAVORTEX_GROUND,
1452         WL_SUMMONFB,
1453         WL_SUMMONBL,
1454         WL_SUMMONWB,
1455         WL_SUMMON_ATK_FIRE,
1456         WL_SUMMON_ATK_WIND,
1457         WL_SUMMON_ATK_WATER,
1458         WL_SUMMON_ATK_GROUND,
1459         WL_SUMMONSTONE,
1460         WL_RELEASE,
1461         WL_READING_SB,
1462         WL_FREEZE_SP,
1463
1464         RA_ARROWSTORM,
1465         RA_FEARBREEZE,
1466         RA_RANGERMAIN,
1467         RA_AIMEDBOLT,
1468         RA_DETONATOR,
1469         RA_ELECTRICSHOCKER,
1470         RA_CLUSTERBOMB,
1471         RA_WUGMASTERY,
1472         RA_WUGRIDER,
1473         RA_WUGDASH,
1474         RA_WUGSTRIKE,
1475         RA_WUGBITE,
1476         RA_TOOTHOFWUG,
1477         RA_SENSITIVEKEEN,
1478         RA_CAMOUFLAGE,
1479         RA_RESEARCHTRAP,
1480         RA_MAGENTATRAP,
1481         RA_COBALTTRAP,
1482         RA_MAIZETRAP,
1483         RA_VERDURETRAP,
1484         RA_FIRINGTRAP,
1485         RA_ICEBOUNDTRAP,
1486
1487         NC_MADOLICENCE,
1488         NC_BOOSTKNUCKLE,
1489         NC_PILEBUNKER,
1490         NC_VULCANARM,
1491         NC_FLAMELAUNCHER,
1492         NC_COLDSLOWER,
1493         NC_ARMSCANNON,
1494         NC_ACCELERATION,
1495         NC_HOVERING,
1496         NC_F_SIDESLIDE,
1497         NC_B_SIDESLIDE,
1498         NC_MAINFRAME,
1499         NC_SELFDESTRUCTION,
1500         NC_SHAPESHIFT,
1501         NC_EMERGENCYCOOL,
1502         NC_INFRAREDSCAN,
1503         NC_ANALYZE,
1504         NC_MAGNETICFIELD,
1505         NC_NEUTRALBARRIER,
1506         NC_STEALTHFIELD,
1507         NC_REPAIR,
1508         NC_TRAININGAXE,
1509         NC_RESEARCHFE,
1510         NC_AXEBOOMERANG,
1511         NC_POWERSWING,
1512         NC_AXETORNADO,
1513         NC_SILVERSNIPER,
1514         NC_MAGICDECOY,
1515         NC_DISJOINT,
1516
1517         SC_FATALMENACE,
1518         SC_REPRODUCE,
1519         SC_AUTOSHADOWSPELL,
1520         SC_SHADOWFORM,
1521         SC_TRIANGLESHOT,
1522         SC_BODYPAINT,
1523         SC_INVISIBILITY,
1524         SC_DEADLYINFECT,
1525         SC_ENERVATION,
1526         SC_GROOMY,
1527         SC_IGNORANCE,
1528         SC_LAZINESS,
1529         SC_UNLUCKY,
1530         SC_WEAKNESS,
1531         SC_STRIPACCESSARY,
1532         SC_MANHOLE,
1533         SC_DIMENSIONDOOR,
1534         SC_CHAOSPANIC,
1535         SC_MAELSTROM,
1536         SC_BLOODYLUST,
1537         SC_FEINTBOMB,
1538
1539         LG_CANNONSPEAR = 2307,
1540         LG_BANISHINGPOINT,
1541         LG_TRAMPLE,
1542         LG_SHIELDPRESS,
1543         LG_REFLECTDAMAGE,
1544         LG_PINPOINTATTACK,
1545         LG_FORCEOFVANGUARD,
1546         LG_RAGEBURST,
1547         LG_SHIELDSPELL,
1548         LG_EXEEDBREAK,
1549         LG_OVERBRAND,
1550         LG_PRESTIGE,
1551         LG_BANDING,
1552         LG_MOONSLASHER,
1553         LG_RAYOFGENESIS,
1554         LG_PIETY,
1555         LG_EARTHDRIVE,
1556         LG_HESPERUSLIT,
1557         LG_INSPIRATION,
1558
1559         SR_DRAGONCOMBO,
1560         SR_SKYNETBLOW,
1561         SR_EARTHSHAKER,
1562         SR_FALLENEMPIRE,
1563         SR_TIGERCANNON,
1564         SR_HELLGATE,
1565         SR_RAMPAGEBLASTER,
1566         SR_CRESCENTELBOW,
1567         SR_CURSEDCIRCLE,
1568         SR_LIGHTNINGWALK,
1569         SR_KNUCKLEARROW,
1570         SR_WINDMILL,
1571         SR_RAISINGDRAGON,
1572         SR_GENTLETOUCH,
1573         SR_ASSIMILATEPOWER,
1574         SR_POWERVELOCITY,
1575         SR_CRESCENTELBOW_AUTOSPELL,
1576         SR_GATEOFHELL,
1577         SR_GENTLETOUCH_QUIET,
1578         SR_GENTLETOUCH_CURE,
1579         SR_GENTLETOUCH_ENERGYGAIN,
1580         SR_GENTLETOUCH_CHANGE,
1581         SR_GENTLETOUCH_REVITALIZE,
1582
1583         WA_SWING_DANCE = 2350,
1584         WA_SYMPHONY_OF_LOVER,
1585         WA_MOONLIT_SERENADE,
1586
1587         MI_RUSH_WINDMILL = 2381,
1588         MI_ECHOSONG,
1589         MI_HARMONIZE,
1590
1591         WM_LESSON = 2412,
1592         WM_METALICSOUND,
1593         WM_REVERBERATION,
1594         WM_REVERBERATION_MELEE,
1595         WM_REVERBERATION_MAGIC,
1596         WM_DOMINION_IMPULSE,
1597         WM_SEVERE_RAINSTORM,
1598         WM_POEMOFNETHERWORLD,
1599         WM_VOICEOFSIREN,
1600         WM_DEADHILLHERE,
1601         WM_LULLABY_DEEPSLEEP,
1602         WM_SIRCLEOFNATURE,
1603         WM_RANDOMIZESPELL,
1604         WM_GLOOMYDAY,
1605         WM_GREAT_ECHO,
1606         WM_SONG_OF_MANA,
1607         WM_DANCE_WITH_WUG,
1608         WM_SOUND_OF_DESTRUCTION,
1609         WM_SATURDAY_NIGHT_FEVER,
1610         WM_LERADS_DEW,
1611         WM_MELODYOFSINK,
1612         WM_BEYOND_OF_WARCRY,
1613         WM_UNLIMITED_HUMMING_VOICE,
1614
1615         SO_FIREWALK = 2443,
1616         SO_ELECTRICWALK,
1617         SO_SPELLFIST,
1618         SO_EARTHGRAVE,
1619         SO_DIAMONDDUST,
1620         SO_POISON_BUSTER,
1621         SO_PSYCHIC_WAVE,
1622         SO_CLOUD_KILL,
1623         SO_STRIKING,
1624         SO_WARMER,
1625         SO_VACUUM_EXTREME,
1626         SO_VARETYR_SPEAR,
1627         SO_ARRULLO,
1628         SO_EL_CONTROL,
1629         SO_SUMMON_AGNI,
1630         SO_SUMMON_AQUA,
1631         SO_SUMMON_VENTUS,
1632         SO_SUMMON_TERA,
1633         SO_EL_ACTION,
1634         SO_EL_ANALYSIS,
1635         SO_EL_SYMPATHY,
1636         SO_EL_CURE,
1637         SO_FIRE_INSIGNIA,
1638         SO_WATER_INSIGNIA,
1639         SO_WIND_INSIGNIA,
1640         SO_EARTH_INSIGNIA,
1641
1642         GN_TRAINING_SWORD = 2474,
1643         GN_REMODELING_CART,
1644         GN_CART_TORNADO,
1645         GN_CARTCANNON,
1646         GN_CARTBOOST,
1647         GN_THORNS_TRAP,
1648         GN_BLOOD_SUCKER,
1649         GN_SPORE_EXPLOSION,
1650         GN_WALLOFTHORN,
1651         GN_CRAZYWEED,
1652         GN_CRAZYWEED_ATK,
1653         GN_DEMONIC_FIRE,
1654         GN_FIRE_EXPANSION,
1655         GN_FIRE_EXPANSION_SMOKE_POWDER,
1656         GN_FIRE_EXPANSION_TEAR_GAS,
1657         GN_FIRE_EXPANSION_ACID,
1658         GN_HELLS_PLANT,
1659         GN_HELLS_PLANT_ATK,
1660         GN_MANDRAGORA,
1661         GN_SLINGITEM,
1662         GN_CHANGEMATERIAL,
1663         GN_MIX_COOKING,
1664         GN_MAKEBOMB,
1665         GN_S_PHARMACY,
1666         GN_SLINGITEM_RANGEMELEEATK,
1667
1668         AB_SECRAMENT = 2515,
1669         WM_SEVERE_RAINSTORM_MELEE,
1670         SR_HOWLINGOFLION,
1671         SR_RIDEINLIGHTNING,
1672         LG_OVERBRAND_BRANDISH,
1673         LG_OVERBRAND_PLUSATK,
1674
1675         ALL_ODINS_RECALL = 2533,
1676         RETURN_TO_ELDICASTES,
1677         ALL_BUYING_STORE,
1678         ALL_GUARDIAN_RECALL,
1679         ALL_ODINS_POWER,
1680         BEER_BOTTLE_CAP,
1681         NPC_ASSASSINCROSS,
1682         NPC_DISSONANCE,
1683         NPC_UGLYDANCE,
1684         ALL_TETANY,
1685         ALL_RAY_OF_PROTECTION,
1686         MC_CARTDECORATE,
1687         GM_ITEM_ATKMAX,
1688         GM_ITEM_ATKMIN,
1689         GM_ITEM_MATKMAX,
1690         GM_ITEM_MATKMIN,
1691
1692         RL_GLITTERING_GREED = 2551,
1693         RL_RICHS_COIN,
1694         RL_MASS_SPIRAL,
1695         RL_BANISHING_BUSTER,
1696         RL_B_TRAP,
1697         RL_FLICKER,
1698         RL_S_STORM,
1699         RL_E_CHAIN,
1700         RL_QD_SHOT,
1701         RL_C_MARKER,
1702         RL_FIREDANCE,
1703         RL_H_MINE,
1704         RL_P_ALTER,
1705         RL_FALLEN_ANGEL,
1706         RL_R_TRIP,
1707         RL_D_TAIL,
1708         RL_FIRE_RAIN,
1709         RL_HEAT_BARREL,
1710         RL_AM_BLAST,
1711         RL_SLUGSHOT,
1712         RL_HAMMER_OF_GOD,
1713         RL_R_TRIP_PLUSATK,
1714         RL_B_FLICKER_ATK,
1715         RL_GLITTERING_GREED_ATK,
1716
1717         KO_YAMIKUMO = 3001,
1718         KO_RIGHT,
1719         KO_LEFT,
1720         KO_JYUMONJIKIRI,
1721         KO_SETSUDAN,
1722         KO_BAKURETSU,
1723         KO_HAPPOKUNAI,
1724         KO_MUCHANAGE,
1725         KO_HUUMARANKA,
1726         KO_MAKIBISHI,
1727         KO_MEIKYOUSISUI,
1728         KO_ZANZOU,
1729         KO_KYOUGAKU,
1730         KO_JYUSATSU,
1731         KO_KAHU_ENTEN,
1732         KO_HYOUHU_HUBUKI,
1733         KO_KAZEHU_SEIRAN,
1734         KO_DOHU_KOUKAI,
1735         KO_KAIHOU,
1736         KO_ZENKAI,
1737         KO_GENWAKU,
1738         KO_IZAYOI,
1739         KG_KAGEHUMI,
1740         KG_KYOMU,
1741         KG_KAGEMUSYA,
1742         OB_ZANGETSU,
1743         OB_OBOROGENSOU,
1744         OB_OBOROGENSOU_TRANSITION_ATK,
1745         OB_AKAITSUKI,
1746
1747         ECL_SNOWFLIP = 3031,
1748         ECL_PEONYMAMY,
1749         ECL_SADAGUI,
1750         ECL_SEQUOIADUST,
1751         ECLAGE_RECALL,
1752
1753         GC_DARKCROW = 5001,
1754         RA_UNLIMIT,
1755         GN_ILLUSIONDOPING,
1756         RK_DRAGONBREATH_WATER,
1757         RK_LUXANIMA,
1758         NC_MAGMA_ERUPTION,
1759         WM_FRIGG_SONG,
1760         SO_ELEMENTAL_SHIELD,
1761         SR_FLASHCOMBO,
1762         SC_ESCAPE,
1763         AB_OFFERTORIUM,
1764         WL_TELEKINESIS_INTENSE,
1765         LG_KINGS_GRACE,
1766         ALL_FULL_THROTTLE,
1767
1768         SU_BASIC_SKILL = 5018,
1769         SU_BITE,
1770         SU_HIDE,
1771         SU_SCRATCH,
1772         SU_STOOP,
1773         SU_LOPE,
1774         SU_SPRITEMABLE,
1775         SU_POWEROFLAND,
1776         SU_SV_STEMSPEAR,
1777         SU_CN_POWDERING,
1778         SU_CN_METEOR,
1779         SU_SV_ROOTTWIST,
1780         SU_SV_ROOTTWIST_ATK,
1781         SU_POWEROFLIFE,
1782         SU_SCAROFTAROU,
1783         SU_PICKYPECK,
1784         SU_PICKYPECK_DOUBLE_ATK,
1785         SU_ARCLOUSEDASH,
1786         SU_LUNATICCARROTBEAT,
1787         SU_POWEROFSEA,
1788         SU_TUNABELLY,
1789         SU_TUNAPARTY,
1790         SU_BUNCHOFSHRIMP,
1791         SU_FRESHSHRIMP,
1792         SU_CN_METEOR2,
1793         SU_LUNATICCARROTBEAT2,
1794         SU_SOULATTACK,
1795         SU_POWEROFFLOCK,
1796         SU_SVG_SPIRIT,
1797         SU_HISS,
1798         SU_NYANGGRASS,
1799         SU_GROOMING,
1800         SU_PURRING,
1801         SU_SHRIMPARTY,
1802         SU_SPIRITOFLIFE,
1803         SU_MEOWMEOW,
1804         SU_SPIRITOFLAND,
1805         SU_CHATTERING,
1806         SU_SPIRITOFSEA,
1807
1808         HLIF_HEAL = 8001,
1809         HLIF_AVOID,
1810         HLIF_BRAIN,
1811         HLIF_CHANGE,
1812         HAMI_CASTLE,
1813         HAMI_DEFENCE,
1814         HAMI_SKIN,
1815         HAMI_BLOODLUST,
1816         HFLI_MOON,
1817         HFLI_FLEET,
1818         HFLI_SPEED,
1819         HFLI_SBR44,
1820         HVAN_CAPRICE,
1821         HVAN_CHAOTIC,
1822         HVAN_INSTRUCT,
1823         HVAN_EXPLOSION,
1824         MUTATION_BASEJOB,
1825         MH_SUMMON_LEGION,
1826         MH_NEEDLE_OF_PARALYZE,
1827         MH_POISON_MIST,
1828         MH_PAIN_KILLER,
1829         MH_LIGHT_OF_REGENE,
1830         MH_OVERED_BOOST,
1831         MH_ERASER_CUTTER,
1832         MH_XENO_SLASHER,
1833         MH_SILENT_BREEZE,
1834         MH_STYLE_CHANGE,
1835         MH_SONIC_CRAW,
1836         MH_SILVERVEIN_RUSH,
1837         MH_MIDNIGHT_FRENZY,
1838         MH_STAHL_HORN,
1839         MH_GOLDENE_FERSE,
1840         MH_STEINWAND,
1841         MH_HEILIGE_STANGE,
1842         MH_ANGRIFFS_MODUS,
1843         MH_TINDER_BREAKER,
1844         MH_CBC,
1845         MH_EQC,
1846         MH_MAGMA_FLOW,
1847         MH_GRANITIC_ARMOR,
1848         MH_LAVA_SLIDE,
1849         MH_PYROCLASTIC,
1850         MH_VOLCANIC_ASH,
1851
1852         MS_BASH = 8201,
1853         MS_MAGNUM,
1854         MS_BOWLINGBASH,
1855         MS_PARRYING,
1856         MS_REFLECTSHIELD,
1857         MS_BERSERK,
1858         MA_DOUBLE,
1859         MA_SHOWER,
1860         MA_SKIDTRAP,
1861         MA_LANDMINE,
1862         MA_SANDMAN,
1863         MA_FREEZINGTRAP,
1864         MA_REMOVETRAP,
1865         MA_CHARGEARROW,
1866         MA_SHARPSHOOTING,
1867         ML_PIERCE,
1868         ML_BRANDISH,
1869         ML_SPIRALPIERCE,
1870         ML_DEFENDER,
1871         ML_AUTOGUARD,
1872         ML_DEVOTION,
1873         MER_MAGNIFICAT,
1874         MER_QUICKEN,
1875         MER_SIGHT,
1876         MER_CRASH,
1877         MER_REGAIN,
1878         MER_TENDER,
1879         MER_BENEDICTION,
1880         MER_RECUPERATE,
1881         MER_MENTALCURE,
1882         MER_COMPRESS,
1883         MER_PROVOKE,
1884         MER_AUTOBERSERK,
1885         MER_DECAGI,
1886         MER_SCAPEGOAT,
1887         MER_LEXDIVINA,
1888         MER_ESTIMATION,
1889         MER_KYRIE,
1890         MER_BLESSING,
1891         MER_INCAGI,
1892         MER_INVINCIBLEOFF2,
1893
1894         EL_CIRCLE_OF_FIRE = 8401,
1895         EL_FIRE_CLOAK,
1896         EL_FIRE_MANTLE,
1897         EL_WATER_SCREEN,
1898         EL_WATER_DROP,
1899         EL_WATER_BARRIER,
1900         EL_WIND_STEP,
1901         EL_WIND_CURTAIN,
1902         EL_ZEPHYR,
1903         EL_SOLID_SKIN,
1904         EL_STONE_SHIELD,
1905         EL_POWER_OF_GAIA,
1906         EL_PYROTECHNIC,
1907         EL_HEATER,
1908         EL_TROPIC,
1909         EL_AQUAPLAY,
1910         EL_COOLER,
1911         EL_CHILLY_AIR,
1912         EL_GUST,
1913         EL_BLAST,
1914         EL_WILD_STORM,
1915         EL_PETROLOGY,
1916         EL_CURSED_SOIL,
1917         EL_UPHEAVAL,
1918         EL_FIRE_ARROW,
1919         EL_FIRE_BOMB,
1920         EL_FIRE_BOMB_ATK,
1921         EL_FIRE_WAVE,
1922         EL_FIRE_WAVE_ATK,
1923         EL_ICE_NEEDLE,
1924         EL_WATER_SCREW,
1925         EL_WATER_SCREW_ATK,
1926         EL_TIDAL_WEAPON,
1927         EL_WIND_SLASH,
1928         EL_HURRICANE,
1929         EL_HURRICANE_ATK,
1930         EL_TYPOON_MIS,
1931         EL_TYPOON_MIS_ATK,
1932         EL_STONE_HAMMER,
1933         EL_ROCK_CRUSHER,
1934         EL_ROCK_CRUSHER_ATK,
1935         EL_STONE_RAIN,
1936 };
1937
1938 /// The client view ids for land skills.
1939 enum s_skill_unit_id {
1940         UNT_SAFETYWALL = 0x7e,
1941         UNT_FIREWALL,
1942         UNT_WARP_WAITING,
1943         UNT_WARP_ACTIVE,
1944         UNT_BENEDICTIO, //TODO
1945         UNT_SANCTUARY,
1946         UNT_MAGNUS,
1947         UNT_PNEUMA,
1948         UNT_DUMMYSKILL, //These show no effect on the client
1949         UNT_FIREPILLAR_WAITING,
1950         UNT_FIREPILLAR_ACTIVE,
1951         UNT_HIDDEN_TRAP, //TODO
1952         UNT_TRAP, //TODO
1953         UNT_HIDDEN_WARP_NPC, //TODO
1954         UNT_USED_TRAPS,
1955         UNT_ICEWALL,
1956         UNT_QUAGMIRE,
1957         UNT_BLASTMINE,
1958         UNT_SKIDTRAP,
1959         UNT_ANKLESNARE,
1960         UNT_VENOMDUST,
1961         UNT_LANDMINE,
1962         UNT_SHOCKWAVE,
1963         UNT_SANDMAN,
1964         UNT_FLASHER,
1965         UNT_FREEZINGTRAP,
1966         UNT_CLAYMORETRAP,
1967         UNT_TALKIEBOX,
1968         UNT_VOLCANO,
1969         UNT_DELUGE,
1970         UNT_VIOLENTGALE,
1971         UNT_LANDPROTECTOR,
1972         UNT_LULLABY,
1973         UNT_RICHMANKIM,
1974         UNT_ETERNALCHAOS,
1975         UNT_DRUMBATTLEFIELD,
1976         UNT_RINGNIBELUNGEN,
1977         UNT_ROKISWEIL,
1978         UNT_INTOABYSS,
1979         UNT_SIEGFRIED,
1980         UNT_DISSONANCE,
1981         UNT_WHISTLE,
1982         UNT_ASSASSINCROSS,
1983         UNT_POEMBRAGI,
1984         UNT_APPLEIDUN,
1985         UNT_UGLYDANCE,
1986         UNT_HUMMING,
1987         UNT_DONTFORGETME,
1988         UNT_FORTUNEKISS,
1989         UNT_SERVICEFORYOU,
1990         UNT_GRAFFITI,
1991         UNT_DEMONSTRATION,
1992         UNT_CALLFAMILY,
1993         UNT_GOSPEL,
1994         UNT_BASILICA,
1995         UNT_MOONLIT,
1996         UNT_FOGWALL,
1997         UNT_SPIDERWEB,
1998         UNT_GRAVITATION,
1999         UNT_HERMODE,
2000         UNT_KAENSIN, //TODO
2001         UNT_SUITON,
2002         UNT_TATAMIGAESHI,
2003         UNT_KAEN,
2004         UNT_GROUNDDRIFT_WIND,
2005         UNT_GROUNDDRIFT_DARK,
2006         UNT_GROUNDDRIFT_POISON,
2007         UNT_GROUNDDRIFT_WATER,
2008         UNT_GROUNDDRIFT_FIRE,
2009         UNT_DEATHWAVE, //TODO
2010         UNT_WATERATTACK, //TODO
2011         UNT_WINDATTACK, //TODO
2012         UNT_EARTHQUAKE, //TODO
2013         UNT_EVILLAND,
2014         UNT_DARK_RUNNER, //TODO
2015         UNT_DARK_TRANSFER, //TODO
2016         UNT_EPICLESIS,
2017         UNT_EARTHSTRAIN,
2018         UNT_MANHOLE,
2019         UNT_DIMENSIONDOOR,
2020         UNT_CHAOSPANIC,
2021         UNT_MAELSTROM,
2022         UNT_BLOODYLUST,
2023         UNT_FEINTBOMB,
2024         UNT_MAGENTATRAP,
2025         UNT_COBALTTRAP,
2026         UNT_MAIZETRAP,
2027         UNT_VERDURETRAP,
2028         UNT_FIRINGTRAP,
2029         UNT_ICEBOUNDTRAP,
2030         UNT_ELECTRICSHOCKER,
2031         UNT_CLUSTERBOMB,
2032         UNT_REVERBERATION,
2033         UNT_SEVERE_RAINSTORM,
2034         UNT_FIREWALK,
2035         UNT_ELECTRICWALK,
2036         UNT_NETHERWORLD,
2037         UNT_PSYCHIC_WAVE,
2038         UNT_CLOUD_KILL,
2039         UNT_POISONSMOKE,
2040         UNT_NEUTRALBARRIER,
2041         UNT_STEALTHFIELD,
2042         UNT_WARMER,
2043         UNT_THORNS_TRAP,
2044         UNT_WALLOFTHORN,
2045         UNT_DEMONIC_FIRE,
2046         UNT_FIRE_EXPANSION_SMOKE_POWDER,
2047         UNT_FIRE_EXPANSION_TEAR_GAS,
2048         UNT_HELLS_PLANT,
2049         UNT_VACUUM_EXTREME,
2050         UNT_BANDING,
2051         UNT_FIRE_MANTLE,
2052         UNT_WATER_BARRIER,
2053         UNT_ZEPHYR,
2054         UNT_POWER_OF_GAIA,
2055         UNT_FIRE_INSIGNIA,
2056         UNT_WATER_INSIGNIA,
2057         UNT_WIND_INSIGNIA,
2058         UNT_EARTH_INSIGNIA,
2059         UNT_POISON_MIST,
2060         UNT_LAVA_SLIDE,
2061         UNT_VOLCANIC_ASH,
2062         UNT_ZENKAI_WATER,
2063         UNT_ZENKAI_LAND,
2064         UNT_ZENKAI_FIRE,
2065         UNT_ZENKAI_WIND,
2066         UNT_MAKIBISHI,
2067         UNT_VENOMFOG,
2068         UNT_ICEMINE,
2069         UNT_FLAMECROSS,
2070         UNT_HELLBURNING,
2071         UNT_MAGMA_ERUPTION,
2072         UNT_KINGS_GRACE,
2073
2074         UNT_GLITTERING_GREED,
2075         UNT_B_TRAP,
2076         UNT_FIRE_RAIN,
2077
2078         UNT_CATNIPPOWDER,
2079         UNT_NYANGGRASS,
2080
2081         /**
2082          * Guild Auras
2083          **/
2084         UNT_GD_LEADERSHIP = 0xc1,
2085         UNT_GD_GLORYWOUNDS = 0xc2,
2086         UNT_GD_SOULCOLD = 0xc3,
2087         UNT_GD_HAWKEYES = 0xc4,
2088
2089         UNT_MAX = 0x190
2090 };
2091
2092 /**
2093  * Skill Unit Save
2094  **/
2095 void skill_usave_add(struct map_session_data * sd, uint16 skill_id, uint16 skill_lv);
2096 void skill_usave_trigger(struct map_session_data *sd);
2097
2098 /**
2099  * Warlock
2100  **/
2101 #define MAX_SKILL_SPELLBOOK_DB  17
2102 enum wl_spheres {
2103         WLS_FIRE = 0x44,
2104         WLS_WIND,
2105         WLS_WATER,
2106         WLS_STONE,
2107 };
2108 struct s_skill_spellbook_db {
2109         unsigned short nameid;
2110         unsigned short skill_id;
2111         unsigned short point;
2112 };
2113 extern struct s_skill_spellbook_db skill_spellbook_db[MAX_SKILL_SPELLBOOK_DB];
2114 extern unsigned short skill_spellbook_count;
2115 void skill_spellbook(struct map_session_data *sd, unsigned short nameid);
2116 int skill_block_check(struct block_list *bl, enum sc_type type, uint16 skill_id);
2117
2118 /**
2119  * Guilottine Cross
2120  **/
2121 #define MAX_SKILL_MAGICMUSHROOM_DB 25
2122 struct s_skill_magicmushroom_db {
2123         uint16 skill_id;
2124 };
2125 extern struct s_skill_magicmushroom_db skill_magicmushroom_db[MAX_SKILL_MAGICMUSHROOM_DB];
2126 extern unsigned short skill_magicmushroom_count;
2127 int skill_maelstrom_suction(struct block_list *bl, va_list ap);
2128 bool skill_check_shadowform(struct block_list *bl, int64 damage, int hit);
2129
2130 /**
2131  * Ranger
2132  **/
2133 int skill_detonator(struct block_list *bl, va_list ap);
2134 bool skill_check_camouflage(struct block_list *bl, struct status_change_entry *sce);
2135
2136 /**
2137  * Mechanic
2138  **/
2139 int skill_magicdecoy(struct map_session_data *sd, unsigned short nameid);
2140
2141 /**
2142  * Guiltoine Cross
2143  **/
2144 int skill_poisoningweapon( struct map_session_data *sd, unsigned short nameid);
2145
2146 /**
2147  * Auto Shadow Spell (Shadow Chaser)
2148  **/
2149 int skill_select_menu(struct map_session_data *sd,uint16 skill_id);
2150
2151 int skill_elementalanalysis(struct map_session_data *sd, int n, uint16 skill_lv, unsigned short *item_list); // Sorcerer Four Elemental Analisys.
2152 int skill_changematerial(struct map_session_data *sd, int n, unsigned short *item_list);        // Genetic Change Material.
2153 int skill_get_elemental_type(uint16 skill_id, uint16 skill_lv);
2154
2155 int skill_is_combo(uint16 skill_id);
2156 void skill_combo_toggle_inf(struct block_list* bl, uint16 skill_id, int inf);
2157 void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int tick);
2158
2159 void skill_reveal_trap_inarea(struct block_list *src, int range, int x, int y);
2160
2161 #ifdef ADJUST_SKILL_DAMAGE
2162 /// Skill Damage target
2163 enum e_skill_damage_caster {
2164         SDC_PC   = 0x01,
2165         SDC_MOB  = 0x02,
2166         SDC_PET  = 0x04,
2167         SDC_HOM  = 0x08,
2168         SDC_MER  = 0x10,
2169         SDC_ELEM = 0x20,
2170         SDC_ALL  = SDC_PC|SDC_MOB|SDC_PET|SDC_HOM|SDC_MER|SDC_ELEM,
2171 };
2172 #endif
2173
2174 /// Variable name of copied skill by Plagiarism
2175 #define SKILL_VAR_PLAGIARISM "CLONE_SKILL"
2176 /// Variable name of copied skill level by Plagiarism
2177 #define SKILL_VAR_PLAGIARISM_LV "CLONE_SKILL_LV"
2178
2179 /// Variable name of copied skill by Reproduce
2180 #define SKILL_VAR_REPRODUCE "REPRODUCE_SKILL"
2181 /// Variable name of copied skill level by Reproduce
2182 #define SKILL_VAR_REPRODUCE_LV "REPRODUCE_SKILL_LV"
2183
2184 #define SKILL_CHK_HOMUN(skill_id) ( (skill_id) >= HM_SKILLBASE && (skill_id) < HM_SKILLBASE+MAX_HOMUNSKILL )
2185 #define SKILL_CHK_MERC(skill_id)  ( (skill_id) >= MC_SKILLBASE && (skill_id) < MC_SKILLBASE+MAX_MERCSKILL )
2186 #define SKILL_CHK_ELEM(skill_id)  ( (skill_id) >= EL_SKILLBASE && (skill_id) < EL_SKILLBASE+MAX_ELEMENTALSKILL )
2187 #define SKILL_CHK_GUILD(skill_id) ( (skill_id) >= GD_SKILLBASE && (skill_id) < GD_SKILLBASE+MAX_GUILDSKILL )
2188
2189 #ifdef __cplusplus
2190 }
2191 #endif
2192
2193 #endif /* _SKILL_H_ */