summaryrefslogtreecommitdiff
path: root/src/map/skill.t.hpp
blob: 36090d5726c68733d2f816bbd962a52c4303cdad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
#ifndef SKILL_T_HPP
#define SKILL_T_HPP

#include <cstdint>

#include "../common/utils2.hpp"

// TODO remove most of these as their corresponding SkillIDs get deleted.
enum class StatusChange : uint16_t
{
    // indices into (map_session_data).status_change
    SC_SENDMAX          = 256,
#define SC_SENDMAX StatusChange::SC_SENDMAX

    // sometimes means "none", sometimes not
    NEGATIVE1           = 0xffff,
    ANY_BAD             = NEGATIVE1,

    // these ones are used by clif_status_change,
    // e.g. by the magic system
    ZERO                = 0,
    ATTACK_ICON_GENERIC = 2000,
    ATTACK_ICON_SHEARING = 2001,
    CART                = 0x0c,
    CLIF_OPTION_SC_INVISIBILITY = 0x1000,
#define CLIF_OPTION_SC_INVISIBILITY StatusChange::CLIF_OPTION_SC_INVISIBILITY
    CLIF_OPTION_SC_SCRIBE = 0x1001,
#define CLIF_OPTION_SC_SCRIBE StatusChange::CLIF_OPTION_SC_SCRIBE

    // the rest are the normal effects
    SC_PROVOKE          = 0,
#define SC_PROVOKE StatusChange::SC_PROVOKE
    SC_ENDURE           = 1,
#define SC_ENDURE StatusChange::SC_ENDURE
    SC_TWOHANDQUICKEN   = 2,
#define SC_TWOHANDQUICKEN StatusChange::SC_TWOHANDQUICKEN
    SC_CONCENTRATE      = 3,
#define SC_CONCENTRATE StatusChange::SC_CONCENTRATE
    SC_HIDING           = 4,
#define SC_HIDING StatusChange::SC_HIDING
    SC_CLOAKING         = 5,
#define SC_CLOAKING StatusChange::SC_CLOAKING
    SC_ENCPOISON        = 6,
#define SC_ENCPOISON StatusChange::SC_ENCPOISON
    SC_POISONREACT      = 7,
#define SC_POISONREACT StatusChange::SC_POISONREACT
    SC_QUAGMIRE         = 8,
#define SC_QUAGMIRE StatusChange::SC_QUAGMIRE
    SC_ANGELUS          = 9,
#define SC_ANGELUS StatusChange::SC_ANGELUS
    SC_BLESSING         = 10,
#define SC_BLESSING StatusChange::SC_BLESSING
    SC_SIGNUMCRUCIS     = 11,
#define SC_SIGNUMCRUCIS StatusChange::SC_SIGNUMCRUCIS
    SC_INCREASEAGI      = 12,
#define SC_INCREASEAGI StatusChange::SC_INCREASEAGI
    SC_DECREASEAGI      = 13,
#define SC_DECREASEAGI StatusChange::SC_DECREASEAGI
    SC_SLOWPOISON       = 14,   //
#define SC_SLOWPOISON StatusChange::SC_SLOWPOISON
    SC_IMPOSITIO        = 15,
#define SC_IMPOSITIO StatusChange::SC_IMPOSITIO
    SC_SUFFRAGIUM       = 16,
#define SC_SUFFRAGIUM StatusChange::SC_SUFFRAGIUM
    SC_ASPERSIO         = 17,
#define SC_ASPERSIO StatusChange::SC_ASPERSIO
    SC_BENEDICTIO       = 18,
#define SC_BENEDICTIO StatusChange::SC_BENEDICTIO
    SC_KYRIE            = 19,
#define SC_KYRIE StatusChange::SC_KYRIE
    SC_MAGNIFICAT       = 20,
#define SC_MAGNIFICAT StatusChange::SC_MAGNIFICAT
    SC_GLORIA           = 21,
#define SC_GLORIA StatusChange::SC_GLORIA
    SC_AETERNA          = 22,
#define SC_AETERNA StatusChange::SC_AETERNA
    SC_ADRENALINE       = 23,
#define SC_ADRENALINE StatusChange::SC_ADRENALINE
    SC_WEAPONPERFECTION = 24,
#define SC_WEAPONPERFECTION StatusChange::SC_WEAPONPERFECTION
    SC_OVERTHRUST       = 25,
#define SC_OVERTHRUST StatusChange::SC_OVERTHRUST
    SC_MAXIMIZEPOWER    = 26,
#define SC_MAXIMIZEPOWER StatusChange::SC_MAXIMIZEPOWER
    SC_RIDING           = 27,
#define SC_RIDING StatusChange::SC_RIDING
    SC_FALCON           = 28,
#define SC_FALCON StatusChange::SC_FALCON
    SC_TRICKDEAD        = 29,
#define SC_TRICKDEAD StatusChange::SC_TRICKDEAD
    SC_LOUD             = 30,
#define SC_LOUD StatusChange::SC_LOUD
    SC_ENERGYCOAT       = 31,
#define SC_ENERGYCOAT StatusChange::SC_ENERGYCOAT
    SC_BROKNARMOR       = 32,
#define SC_BROKNARMOR StatusChange::SC_BROKNARMOR
    SC_BROKNWEAPON      = 33,
#define SC_BROKNWEAPON StatusChange::SC_BROKNWEAPON
    SC_HALLUCINATION    = 34,
#define SC_HALLUCINATION StatusChange::SC_HALLUCINATION
    SC_WEIGHT50         = 35,
#define SC_WEIGHT50 StatusChange::SC_WEIGHT50
    SC_WEIGHT90         = 36,
#define SC_WEIGHT90 StatusChange::SC_WEIGHT90
    SC_SPEEDPOTION0     = 37,   //
#define SC_SPEEDPOTION0 StatusChange::SC_SPEEDPOTION0
    SC_SPEEDPOTION1     = 38,
#define SC_SPEEDPOTION1 StatusChange::SC_SPEEDPOTION1
    SC_SPEEDPOTION2     = 39,
#define SC_SPEEDPOTION2 StatusChange::SC_SPEEDPOTION2

    SC_STRIPWEAPON      = 50,
#define SC_STRIPWEAPON StatusChange::SC_STRIPWEAPON
    SC_STRIPSHIELD      = 51,
#define SC_STRIPSHIELD StatusChange::SC_STRIPSHIELD
    SC_STRIPARMOR       = 52,
#define SC_STRIPARMOR StatusChange::SC_STRIPARMOR
    SC_STRIPHELM        = 53,
#define SC_STRIPHELM StatusChange::SC_STRIPHELM
    SC_CP_WEAPON        = 54,
#define SC_CP_WEAPON StatusChange::SC_CP_WEAPON
    SC_CP_SHIELD        = 55,
#define SC_CP_SHIELD StatusChange::SC_CP_SHIELD
    SC_CP_ARMOR         = 56,
#define SC_CP_ARMOR StatusChange::SC_CP_ARMOR
    SC_CP_HELM          = 57,
#define SC_CP_HELM StatusChange::SC_CP_HELM
    SC_AUTOGUARD        = 58,
#define SC_AUTOGUARD StatusChange::SC_AUTOGUARD
    SC_REFLECTSHIELD    = 59,
#define SC_REFLECTSHIELD StatusChange::SC_REFLECTSHIELD
    SC_DEVOTION         = 60,
#define SC_DEVOTION StatusChange::SC_DEVOTION

    SC_DEFENDER         = 62,
#define SC_DEFENDER StatusChange::SC_DEFENDER

    SC_SPEARSQUICKEN    = 68,
#define SC_SPEARSQUICKEN StatusChange::SC_SPEARSQUICKEN

    SC_HEALING          = 70,   //
#define SC_HEALING StatusChange::SC_HEALING

    SC_SIGHTTRASHER     = 73,
#define SC_SIGHTTRASHER StatusChange::SC_SIGHTTRASHER

    SC_EXPLOSIONSPIRITS = 86,
#define SC_EXPLOSIONSPIRITS StatusChange::SC_EXPLOSIONSPIRITS
    SC_STEELBODY        = 87,
#define SC_STEELBODY StatusChange::SC_STEELBODY

    SC_FLAMELAUNCHER    = 90,
#define SC_FLAMELAUNCHER StatusChange::SC_FLAMELAUNCHER
    SC_FROSTWEAPON      = 91,
#define SC_FROSTWEAPON StatusChange::SC_FROSTWEAPON
    SC_LIGHTNINGLOADER  = 92,
#define SC_LIGHTNINGLOADER StatusChange::SC_LIGHTNINGLOADER
    SC_SEISMICWEAPON    = 93,
#define SC_SEISMICWEAPON StatusChange::SC_SEISMICWEAPON

    SC_AURABLADE        = 103,
#define SC_AURABLADE StatusChange::SC_AURABLADE
    SC_PARRYING         = 104,
#define SC_PARRYING StatusChange::SC_PARRYING
    SC_CONCENTRATION    = 105,
#define SC_CONCENTRATION StatusChange::SC_CONCENTRATION
    SC_TENSIONRELAX     = 106,
#define SC_TENSIONRELAX StatusChange::SC_TENSIONRELAX
    SC_BERSERK          = 107,
#define SC_BERSERK StatusChange::SC_BERSERK

    SC_ASSUMPTIO        = 110,
#define SC_ASSUMPTIO StatusChange::SC_ASSUMPTIO

    SC_MAGICPOWER       = 113,
#define SC_MAGICPOWER StatusChange::SC_MAGICPOWER

    SC_TRUESIGHT        = 115,
#define SC_TRUESIGHT StatusChange::SC_TRUESIGHT
    SC_WINDWALK         = 116,
#define SC_WINDWALK StatusChange::SC_WINDWALK
    SC_MELTDOWN         = 117,
#define SC_MELTDOWN StatusChange::SC_MELTDOWN
    SC_CARTBOOST        = 118,
#define SC_CARTBOOST StatusChange::SC_CARTBOOST

    SC_REJECTSWORD      = 120,
#define SC_REJECTSWORD StatusChange::SC_REJECTSWORD
    SC_MARIONETTE       = 121,
#define SC_MARIONETTE StatusChange::SC_MARIONETTE

    SC_HEADCRUSH        = 124,
#define SC_HEADCRUSH StatusChange::SC_HEADCRUSH
    SC_JOINTBEAT        = 125,
#define SC_JOINTBEAT StatusChange::SC_JOINTBEAT
    SC_BASILICA         = SC_JOINTBEAT,
#define SC_BASILICA StatusChange::SC_BASILICA

    SC_STONE            = 128,
#define SC_STONE StatusChange::SC_STONE
    SC_FREEZE           = 129,
#define SC_FREEZE StatusChange::SC_FREEZE
    SC_STAN             = 130,
#define SC_STAN StatusChange::SC_STAN
    SC_SLEEP            = 131,
#define SC_SLEEP StatusChange::SC_SLEEP
    SC_POISON           = 132,  //
#define SC_POISON StatusChange::SC_POISON
    SC_CURSE            = 133,
#define SC_CURSE StatusChange::SC_CURSE
    SC_SILENCE          = 134,
#define SC_SILENCE StatusChange::SC_SILENCE
    SC_DIVINA           = SC_SILENCE,
#define SC_DIVINA StatusChange::SC_DIVINA
    SC_CONFUSION        = 135,
#define SC_CONFUSION StatusChange::SC_CONFUSION
    SC_BLIND            = 136,
#define SC_BLIND StatusChange::SC_BLIND

    SC_SAFETYWALL       = 140,
#define SC_SAFETYWALL StatusChange::SC_SAFETYWALL
    SC_PNEUMA           = 141,
#define SC_PNEUMA StatusChange::SC_PNEUMA

    SC_ANKLE            = 143,
#define SC_ANKLE StatusChange::SC_ANKLE
    SC_DANCING          = 144,
#define SC_DANCING StatusChange::SC_DANCING
    SC_KEEPING          = 145,
#define SC_KEEPING StatusChange::SC_KEEPING
    SC_BARRIER          = 146,
#define SC_BARRIER StatusChange::SC_BARRIER

    SC_MAGICROD         = 149,
#define SC_MAGICROD StatusChange::SC_MAGICROD
    SC_SIGHT            = 150,
#define SC_SIGHT StatusChange::SC_SIGHT

    SC_VOLCANO          = 153,
#define SC_VOLCANO StatusChange::SC_VOLCANO
    SC_DELUGE           = 154,
#define SC_DELUGE StatusChange::SC_DELUGE
    SC_VIOLENTGALE      = 155,
#define SC_VIOLENTGALE StatusChange::SC_VIOLENTGALE

    SC_EXTREMITYFIST    = 158,
#define SC_EXTREMITYFIST StatusChange::SC_EXTREMITYFIST

    SC_ENSEMBLE         = 159,
#define SC_ENSEMBLE StatusChange::SC_ENSEMBLE

    SC_LULLABY          = 160,
#define SC_LULLABY StatusChange::SC_LULLABY
    SC_RICHMANKIM       = 161,
#define SC_RICHMANKIM StatusChange::SC_RICHMANKIM
    SC_ETERNALCHAOS     = 162,
#define SC_ETERNALCHAOS StatusChange::SC_ETERNALCHAOS
    SC_DRUMBATTLE       = 163,
#define SC_DRUMBATTLE StatusChange::SC_DRUMBATTLE
    SC_NIBELUNGEN       = 164,
#define SC_NIBELUNGEN StatusChange::SC_NIBELUNGEN
    SC_ROKISWEIL        = 165,
#define SC_ROKISWEIL StatusChange::SC_ROKISWEIL
    SC_INTOABYSS        = 166,
#define SC_INTOABYSS StatusChange::SC_INTOABYSS

    SC_DISSONANCE       = 168,
#define SC_DISSONANCE StatusChange::SC_DISSONANCE
    SC_WHISTLE          = 169,
#define SC_WHISTLE StatusChange::SC_WHISTLE
    SC_ASSNCROS         = 170,
#define SC_ASSNCROS StatusChange::SC_ASSNCROS
    SC_POEMBRAGI        = 171,
#define SC_POEMBRAGI StatusChange::SC_POEMBRAGI
    SC_APPLEIDUN        = 172,
#define SC_APPLEIDUN StatusChange::SC_APPLEIDUN
    SC_UGLYDANCE        = 173,
#define SC_UGLYDANCE StatusChange::SC_UGLYDANCE
    SC_HUMMING          = 174,
#define SC_HUMMING StatusChange::SC_HUMMING
    SC_DONTFORGETME     = 175,
#define SC_DONTFORGETME StatusChange::SC_DONTFORGETME
    SC_FORTUNE          = 176,
#define SC_FORTUNE StatusChange::SC_FORTUNE
    SC_SERVICE4U        = 177,
#define SC_SERVICE4U StatusChange::SC_SERVICE4U
    SC_FOGWALL          = 178,
#define SC_FOGWALL StatusChange::SC_FOGWALL
    SC_GOSPEL           = 179,
#define SC_GOSPEL StatusChange::SC_GOSPEL
    SC_SPIDERWEB        = 180,
#define SC_SPIDERWEB StatusChange::SC_SPIDERWEB
    SC_MEMORIZE         = 181,
#define SC_MEMORIZE StatusChange::SC_MEMORIZE
    SC_LANDPROTECTOR    = 182,
#define SC_LANDPROTECTOR StatusChange::SC_LANDPROTECTOR
    SC_ADAPTATION       = 183,
#define SC_ADAPTATION StatusChange::SC_ADAPTATION
    SC_CHASEWALK        = 184,
#define SC_CHASEWALK StatusChange::SC_CHASEWALK
    SC_ATKPOT           = 185,  //
#define SC_ATKPOT StatusChange::SC_ATKPOT
    SC_MATKPOT          = 186,
#define SC_MATKPOT StatusChange::SC_MATKPOT
    SC_WEDDING          = 187,
#define SC_WEDDING StatusChange::SC_WEDDING
    SC_NOCHAT           = 188,
#define SC_NOCHAT StatusChange::SC_NOCHAT
    SC_SPLASHER         = 189,  // ?
#define SC_SPLASHER StatusChange::SC_SPLASHER
    SC_SELFDESTRUCTION  = 190,
#define SC_SELFDESTRUCTION StatusChange::SC_SELFDESTRUCTION
    SC_MINDBREAKER      = 191,
#define SC_MINDBREAKER StatusChange::SC_MINDBREAKER
    SC_SPELLBREAKER     = 192,
#define SC_SPELLBREAKER StatusChange::SC_SPELLBREAKER

// Added for Fate's spells
    SC_HIDE             = 194,  // Hide from `detect' magic (PCs only)
#define SC_HIDE StatusChange::SC_HIDE
    SC_SHEARED          = 194,  // Has been sheared (mobs only)
#define SC_SHEARED StatusChange::SC_SHEARED
    SC_HALT_REGENERATE  = 195,  // Suspend regeneration
#define SC_HALT_REGENERATE StatusChange::SC_HALT_REGENERATE
    SC_FLYING_BACKPACK  = 196,  // Flying backpack
#define SC_FLYING_BACKPACK StatusChange::SC_FLYING_BACKPACK
    SC_MBARRIER         = 197,  // Magical barrier, magic resistance (val1 : power (%))
#define SC_MBARRIER StatusChange::SC_MBARRIER
    SC_HASTE            = 198,  // `Haste' spell (val1 : power)
#define SC_HASTE StatusChange::SC_HASTE
    SC_PHYS_SHIELD      = 199,  // `Protect' spell, reduce damage (val1: power)
#define SC_PHYS_SHIELD StatusChange::SC_PHYS_SHIELD
    MAX_STATUSCHANGE    = 200,
#define MAX_STATUSCHANGE StatusChange::MAX_STATUSCHANGE
};

constexpr
StatusChange MAJOR_STATUS_EFFECTS[] =
{
    SC_STONE,
    SC_FREEZE,
    SC_STAN,
    SC_SLEEP,
    SC_POISON,
    SC_CURSE,
    SC_SILENCE,
    SC_CONFUSION,
    SC_BLIND,
};

constexpr
StatusChange MAJOR_STATUS_EFFECTS_1[] =
{
    SC_STONE,
    SC_FREEZE,
    SC_STAN,
    SC_SLEEP,
};

// needed to work around some subtractative indexing
// I think it *might* be able to be totally removed.
enum class BadSC
{
    STONE       = 0,
    FREEZE      = 1,
    STAN        = 2,
    SLEEP       = 3,
    POISON      = 4,
    CURSE       = 5,
    SILENCE     = 6,
    CONFUSION   = 7,
    BLIND       = 8,

    COUNT       = 9, // formerly 10,
};

constexpr
StatusChange BadSC_to_SC(BadSC bsc)
{
    return StatusChange(uint16_t(SC_STONE) + int(bsc));
}

constexpr
BadSC BadSC_from_SC(StatusChange sc)
{
    return BadSC(uint16_t(sc) - uint16_t(SC_STONE));
}

// TODO remove most of these
enum class SkillID : uint16_t
{
    // TODO: Remove these!
    NEGATIVE            = 0xffff,
    ZERO                = 0x0000,
    ONE                 = 0x0001,

    // Basic skills.
    // These should probably be made unconditional.
    NV_EMOTE            = 1,    //
#define NV_EMOTE SkillID::NV_EMOTE
    NV_TRADE            = 2,    //
#define NV_TRADE SkillID::NV_TRADE
    NV_PARTY            = 3,    //
#define NV_PARTY SkillID::NV_PARTY

    AL_TELEPORT         = 28,   //
#define AL_TELEPORT SkillID::AL_TELEPORT
    AL_HEAL             = 30,   //
#define AL_HEAL SkillID::AL_HEAL

    AC_OWL              = 45,   // Mallard's Eye
#define AC_OWL SkillID::AC_OWL

    NV_FIRSTAID         = 144,  //
#define NV_FIRSTAID SkillID::NV_FIRSTAID
    NV_TRICKDEAD        = 145,
#define NV_TRICKDEAD SkillID::NV_TRICKDEAD

    NPC_PIERCINGATT     = 160,
#define NPC_PIERCINGATT SkillID::NPC_PIERCINGATT
    NPC_MENTALBREAKER   = 161,
#define NPC_MENTALBREAKER SkillID::NPC_MENTALBREAKER
    NPC_RANGEATTACK     = 162,
#define NPC_RANGEATTACK SkillID::NPC_RANGEATTACK
    NPC_ATTRICHANGE     = 163,
#define NPC_ATTRICHANGE SkillID::NPC_ATTRICHANGE
    NPC_CHANGEWATER     = 164,
#define NPC_CHANGEWATER SkillID::NPC_CHANGEWATER
    NPC_CHANGEGROUND    = 165,
#define NPC_CHANGEGROUND SkillID::NPC_CHANGEGROUND
    NPC_CHANGEFIRE      = 166,
#define NPC_CHANGEFIRE SkillID::NPC_CHANGEFIRE
    NPC_CHANGEWIND      = 167,
#define NPC_CHANGEWIND SkillID::NPC_CHANGEWIND
    NPC_CHANGEPOISON    = 168,
#define NPC_CHANGEPOISON SkillID::NPC_CHANGEPOISON
    NPC_CHANGEHOLY      = 169,
#define NPC_CHANGEHOLY SkillID::NPC_CHANGEHOLY
    NPC_CHANGEDARKNESS  = 170,
#define NPC_CHANGEDARKNESS SkillID::NPC_CHANGEDARKNESS
    NPC_CHANGETELEKINESIS = 171,
#define NPC_CHANGETELEKINESIS SkillID::NPC_CHANGETELEKINESIS
    NPC_CRITICALSLASH   = 172,
#define NPC_CRITICALSLASH SkillID::NPC_CRITICALSLASH
    NPC_COMBOATTACK     = 173,
#define NPC_COMBOATTACK SkillID::NPC_COMBOATTACK
    NPC_GUIDEDATTACK    = 174,
#define NPC_GUIDEDATTACK SkillID::NPC_GUIDEDATTACK
    NPC_SELFDESTRUCTION = 175,  //
#define NPC_SELFDESTRUCTION SkillID::NPC_SELFDESTRUCTION
    NPC_SPLASHATTACK    = 176,
#define NPC_SPLASHATTACK SkillID::NPC_SPLASHATTACK
    NPC_SUICIDE         = 177,
#define NPC_SUICIDE SkillID::NPC_SUICIDE
    NPC_POISON          = 178,  //
#define NPC_POISON SkillID::NPC_POISON
    NPC_BLINDATTACK     = 179,
#define NPC_BLINDATTACK SkillID::NPC_BLINDATTACK
    NPC_SILENCEATTACK   = 180,
#define NPC_SILENCEATTACK SkillID::NPC_SILENCEATTACK
    NPC_STUNATTACK      = 181,
#define NPC_STUNATTACK SkillID::NPC_STUNATTACK
    NPC_PETRIFYATTACK   = 182,
#define NPC_PETRIFYATTACK SkillID::NPC_PETRIFYATTACK
    NPC_CURSEATTACK     = 183,
#define NPC_CURSEATTACK SkillID::NPC_CURSEATTACK
    NPC_SLEEPATTACK     = 184,
#define NPC_SLEEPATTACK SkillID::NPC_SLEEPATTACK
    NPC_RANDOMATTACK    = 185,
#define NPC_RANDOMATTACK SkillID::NPC_RANDOMATTACK
    NPC_WATERATTACK     = 186,
#define NPC_WATERATTACK SkillID::NPC_WATERATTACK
    NPC_GROUNDATTACK    = 187,
#define NPC_GROUNDATTACK SkillID::NPC_GROUNDATTACK
    NPC_FIREATTACK      = 188,
#define NPC_FIREATTACK SkillID::NPC_FIREATTACK
    NPC_WINDATTACK      = 189,  // ?
#define NPC_WINDATTACK SkillID::NPC_WINDATTACK

    NPC_POISONATTACK    = 190,  //
#define NPC_POISONATTACK SkillID::NPC_POISONATTACK
    NPC_HOLYATTACK      = 191,
#define NPC_HOLYATTACK SkillID::NPC_HOLYATTACK
    NPC_DARKNESSATTACK  = 192,
#define NPC_DARKNESSATTACK SkillID::NPC_DARKNESSATTACK
    NPC_TELEKINESISATTACK = 193,
#define NPC_TELEKINESISATTACK SkillID::NPC_TELEKINESISATTACK
    NPC_MAGICALATTACK   = 194,
#define NPC_MAGICALATTACK SkillID::NPC_MAGICALATTACK
    NPC_METAMORPHOSIS   = 195,
#define NPC_METAMORPHOSIS SkillID::NPC_METAMORPHOSIS
    NPC_PROVOCATION     = 196,
#define NPC_PROVOCATION SkillID::NPC_PROVOCATION
    NPC_SMOKING         = 197,
#define NPC_SMOKING SkillID::NPC_SMOKING
    NPC_SUMMONSLAVE     = 198,  //
#define NPC_SUMMONSLAVE SkillID::NPC_SUMMONSLAVE
    NPC_EMOTION         = 199,  //
#define NPC_EMOTION SkillID::NPC_EMOTION
    NPC_TRANSFORMATION  = 200,
#define NPC_TRANSFORMATION SkillID::NPC_TRANSFORMATION
    NPC_BLOODDRAIN      = 201,
#define NPC_BLOODDRAIN SkillID::NPC_BLOODDRAIN
    NPC_ENERGYDRAIN     = 202,
#define NPC_ENERGYDRAIN SkillID::NPC_ENERGYDRAIN
    NPC_KEEPING         = 203,
#define NPC_KEEPING SkillID::NPC_KEEPING
    NPC_DARKBREATH      = 204,
#define NPC_DARKBREATH SkillID::NPC_DARKBREATH
    NPC_DARKBLESSING    = 205,
#define NPC_DARKBLESSING SkillID::NPC_DARKBLESSING
    NPC_BARRIER         = 206,
#define NPC_BARRIER SkillID::NPC_BARRIER
    NPC_DEFENDER        = 207,
#define NPC_DEFENDER SkillID::NPC_DEFENDER
    NPC_LICK            = 208,
#define NPC_LICK SkillID::NPC_LICK
    NPC_HALLUCINATION   = 209,
#define NPC_HALLUCINATION SkillID::NPC_HALLUCINATION
    NPC_REBIRTH         = 210,
#define NPC_REBIRTH SkillID::NPC_REBIRTH
    NPC_SUMMONMONSTER   = 211,
#define NPC_SUMMONMONSTER SkillID::NPC_SUMMONMONSTER

    NPC_SELFDESTRUCTION2 = 333,
#define NPC_SELFDESTRUCTION2 SkillID::NPC_SELFDESTRUCTION2

    NPC_DARKCROSS       = 338,
#define NPC_DARKCROSS SkillID::NPC_DARKCROSS

    TMW_SKILLPOOL       = 339,  // skill pool size
#define TMW_SKILLPOOL SkillID::TMW_SKILLPOOL

    // magic skills
    TMW_MAGIC           = 340,  //
#define TMW_MAGIC SkillID::TMW_MAGIC
    TMW_MAGIC_LIFE      = 341,  //
#define TMW_MAGIC_LIFE SkillID::TMW_MAGIC_LIFE
    TMW_MAGIC_WAR       = 342,  //
#define TMW_MAGIC_WAR SkillID::TMW_MAGIC_WAR
    TMW_MAGIC_TRANSMUTE = 343,  //
#define TMW_MAGIC_TRANSMUTE SkillID::TMW_MAGIC_TRANSMUTE
    TMW_MAGIC_NATURE    = 344,  //
#define TMW_MAGIC_NATURE SkillID::TMW_MAGIC_NATURE
    TMW_MAGIC_ETHER     = 345,  //
#define TMW_MAGIC_ETHER SkillID::TMW_MAGIC_ETHER
    TMW_MAGIC_DARK      = 346,  //
#define TMW_MAGIC_DARK SkillID::TMW_MAGIC_DARK
    TMW_MAGIC_LIGHT     = 347,  //
#define TMW_MAGIC_LIGHT SkillID::TMW_MAGIC_LIGHT

    // focusable skills
    TMW_BRAWLING        = 350,  //
#define TMW_BRAWLING SkillID::TMW_BRAWLING
    TMW_LUCKY_COUNTER   = 351,  //
#define TMW_LUCKY_COUNTER SkillID::TMW_LUCKY_COUNTER
    TMW_SPEED           = 352,  //
#define TMW_SPEED SkillID::TMW_SPEED
    TMW_RESIST_POISON   = 353,  //
#define TMW_RESIST_POISON SkillID::TMW_RESIST_POISON
    TMW_ASTRAL_SOUL     = 354,  //
#define TMW_ASTRAL_SOUL SkillID::TMW_ASTRAL_SOUL
    TMW_RAGING          = 355,  //
#define TMW_RAGING SkillID::TMW_RAGING

    // Note: this value is also hard-coded in common/mmo.hpp
    MAX_SKILL_DB        = 474, // not 450
#define MAX_SKILL_DB SkillID::MAX_SKILL_DB
};

namespace e
{
enum class SkillFlags : uint16_t
{
    ZERO        = 0x00,
    // is a pool skill
    FLAG        = 0x01,
#define SKILL_POOL_FLAG SkillFlags::FLAG
    // is an active pool skill
    ACTIVE      = 0x02,
#define SKILL_POOL_ACTIVE SkillFlags::ACTIVE
    // pool skill has been activated (used for clif)
    ACTIVATED   = 0x04,
#define SKILL_POOL_ACTIVATED SkillFlags::ACTIVATED
};
ENUM_BITWISE_OPERATORS(SkillFlags)
}
using e::SkillFlags;

#endif // SKILL_T_HPP