annotate Engine/Spells/Spells.cpp @ 2499:68cdef6879a0

engine folder
author Ritor1
date Fri, 19 Sep 2014 02:57:42 +0600
parents
children a77c34acdbc9
rev   line source
2499
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
1 #define _CRTDBG_MAP_ALLOC
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
2 #include <stdlib.h>
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
3 #include <crtdbg.h>
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
4
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
5 #define _CRT_SECURE_NO_WARNINGS
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
6 #include <stdlib.h>
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
7 #include "../ErrorHandling.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
8
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
9 #include "Spells.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
10 #include "Engine/Graphics/Overlays.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
11 #include "../LOD.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
12 #include "../texts.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
13
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
14 #include "../Party.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
15 #include "../OurMath.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
16 #include "Engine/Objects/SpriteObject.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
17 #include "Engine/Objects/ObjectList.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
18 #include "Engine/Graphics/Indoor.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
19 #include "AudioPlayer.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
20 #include "Engine/Objects/Actor.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
21 #include "../Game.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
22 #include "stru6.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
23
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
24
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
25 std::array<TownPortalData, 6> TownPortalList = //4ECBB8
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
26 {{
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
27 {Vec3_int_(-5121, 2107, 1), 1536, 0, 21, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
28 {Vec3_int_(-15148, -10240, 1473), 0, 0, 4, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
29 {Vec3_int_(-10519, 5375, 753), 512, 0, 3, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
30 {Vec3_int_(3114, -11055, 513), 0, 0, 10, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
31 {Vec3_int_(-158, 7624, 1), 512, 0, 7, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
32 {Vec3_int_(-1837, -4247, 65), 65, 0, 8, 0}
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
33 }} ;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
34
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
35 struct SpellStats *pSpellStats;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
36
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
37
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
38 std::array<stru324_spell, 103> stru_4E3ACC =
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
39 {{
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
40 {10, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
41 {1000, 0}, {1010, 0}, {1020, 0}, {1030, 0}, {1040, 0}, {1050, 0}, {1060, 0}, {1070, 0}, {1080, 0}, {1090, 0}, {1100, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
42 {2000, 0}, {2010, 0}, {2020, 0}, {2030, 0}, {2040, 0}, {2050, 0}, {2060, 0}, {2070, 0}, {2080, 0}, {2090, 0}, {2100, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
43 {3000, 0}, {3010, 0}, {3020, 0}, {3030, 0}, {3040, 0}, {3050, 0}, {3060, 0}, {3070, 0}, {3080, 0}, {3090, 0}, {3100, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
44 {4000, 0}, {4010, 0}, {4020, 0}, {4030, 0}, {4040, 0}, {4050, 0}, {4060, 0}, {4070, 0}, {4080, 0}, {4090, 0}, {4100, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
45 {5000, 0}, {5010, 0}, {5020, 0}, {5030, 0}, {5040, 0}, {5050, 0}, {5060, 0}, {5070, 0}, {5080, 0}, {5090, 0}, {5100, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
46 {6000, 0}, {6010, 0}, {6020, 0}, {6030, 0}, {6040, 0}, {6050, 0}, {6060, 0}, {6070, 0}, {6080, 0}, {6090, 0}, {6100, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
47 {7000, 0}, {7010, 0}, {7020, 0}, {7030, 0}, {7040, 0}, {7050, 0}, {7060, 0}, {7070, 0}, {7080, 0}, {7090, 0}, {7100, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
48 {8000, 0}, {8010, 0}, {8020, 0}, {8030, 0}, {8040, 0}, {8050, 0}, {8060, 0}, {8070, 0}, {8080, 0}, {8090, 0}, {8100, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
49 {9000, 0}, {9010, 0}, {9020, 0}, {9030, 0}, {9040, 0}, {9050, 0}, {9060, 0}, {9070, 0}, {9080, 0}, {9090, 0}, {9100, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
50 {545, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
51 {545, 0},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
52 {555, 0}
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
53 }};
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
54
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
55
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
56
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
57 SpellData::SpellData( __int16 innormalMana, __int16 inExpertLevelMana, __int16 inMasterLevelMana, __int16 inMagisterLevelMana,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
58 __int16 inNormalLevelRecovery, __int16 inExpertLevelRecovery, __int16 inMasterLevelRecovery, __int16 inMagisterLevelRecovery,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
59 __int8 inbaseDamage, __int8 inbonusSkillDamage, __int16 instats ):
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
60 uNormalLevelMana(innormalMana),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
61 uExpertLevelMana(inExpertLevelMana),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
62 uMasterLevelMana(inMasterLevelMana),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
63 uMagisterLevelMana(inMagisterLevelMana),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
64 uNormalLevelRecovery(inNormalLevelRecovery),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
65 uExpertLevelRecovery(inExpertLevelRecovery),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
66 uMasterLevelRecovery(inMasterLevelRecovery),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
67 uMagisterLevelRecovery(inMagisterLevelRecovery),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
68 baseDamage(inbaseDamage),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
69 bonusSkillDamage(inbonusSkillDamage),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
70 stats(instats)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
71 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
72
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
73 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
74
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
75 //9 spellbook pages 11 spells per page 9*11 =99 +1 zero struct at 0. It counted from 1!
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
76 std::array<SpellData, 100> pSpellDatas={{
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
77 SpellData(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
78
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
79 SpellData(1, 1, 1, 1, 60, 60, 60, 40, 0, 0, 0),//0 fire
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
80 SpellData(2, 2, 2, 2, 110, 110, 100, 90, 3, 3, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
81 SpellData(3, 3, 3, 3, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
82 SpellData(4, 4, 4, 4, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
83 SpellData(5, 5, 5, 5, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
84 SpellData(8, 8, 8, 8, 100, 100, 90, 80, 0, 6, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
85 SpellData(10, 10, 10, 10, 150, 150, 150, 150, 0, 6, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
86 SpellData(15, 15, 15, 15, 120, 120, 120, 120, 0, 6, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
87 SpellData(20, 20, 20, 20, 100, 100, 100, 90, 8, 1, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
88 SpellData(25, 25, 25, 25, 100, 100, 100, 90, 12, 1, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
89 SpellData(30, 30, 30, 30, 90, 90, 90, 90, 15, 15, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
90
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
91 SpellData(1, 1, 1, 0, 60, 60, 60, 60, 0, 0, 0), //1 air
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
92 SpellData(2, 2, 2, 2, 120, 120, 120, 100, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
93 SpellData(3, 3, 3, 3, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
94 SpellData(4, 4, 4, 4, 110, 100, 90, 80, 2, 1, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
95 SpellData(5, 5, 5, 5, 90, 90, 70, 50, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
96 SpellData(8, 8, 8, 8, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
97 SpellData(10, 10, 10, 10, 100, 100, 90, 70, 0, 8, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
98 SpellData(15, 15, 15, 15, 200, 200, 200, 200, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
99 SpellData(20, 20, 20, 20, 100, 100, 100, 90, 10, 10, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
100 SpellData(25, 25, 25, 25, 250, 250, 250, 250, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
101 SpellData(30, 30, 30, 30, 90, 90, 90, 90, 20, 1, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
102
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
103 SpellData(1, 1, 1, 1, 60, 60, 60, 20, 0, 0, 0), //2 water
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
104 SpellData(2, 2, 2, 2, 110, 100, 90, 70, 2, 2, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
105 SpellData(3, 3, 3, 3, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
106 SpellData(4, 4, 4, 4, 110, 100, 90, 80, 0, 4, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
107 SpellData(5, 5, 5, 5, 150, 150, 150, 150, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
108 SpellData(8, 8, 8, 8, 200, 200, 200, 200, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
109 SpellData(10, 10, 10, 10, 100, 100, 90, 80, 9, 9, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
110 SpellData(15, 15, 15, 15, 140, 140, 140, 140, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
111 SpellData(20, 20, 20, 20, 200, 200, 200, 200, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
112 SpellData(25, 25, 25, 25, 80, 80, 80, 80, 12, 3, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
113 SpellData(30, 30, 30, 30, 250, 250, 250, 250, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
114
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
115 SpellData(1, 1, 1, 1, 80, 80, 80, 80, 0, 0, 0), //3 earth
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
116 SpellData(2, 2, 2, 2, 100, 100, 100, 100, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
117 SpellData(3, 3, 3, 3, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
118 SpellData(4, 4, 4, 4, 110, 100, 90, 80, 5, 3, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
119 SpellData(5, 5, 5, 5, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
120 SpellData(8, 8, 8, 8, 100, 100, 90, 80, 0, 9, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
121 SpellData(10, 10, 10, 10, 140, 140, 140, 140, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
122 SpellData(15, 15, 15, 15, 90, 90, 90, 80, 0, 8, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
123 SpellData(20, 20, 20, 20, 150, 150, 150, 150, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
124 SpellData(25, 25, 25, 25, 100, 100, 100, 90, 20, 1, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
125 SpellData(30, 30, 30, 30, 90, 90, 90, 90, 25, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
126
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
127 SpellData(1, 1, 1, 1, 100, 100, 100, 100, 0, 0, 0), //4 spirit
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
128 SpellData(2, 2, 2, 2, 100, 100, 100, 100, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
129 SpellData(3, 3, 3, 3, 90, 90, 90, 90, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
130 SpellData(4, 4, 4, 4, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
131 SpellData(5, 5, 5, 5, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
132 SpellData(8, 8, 8, 8, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
133 SpellData(10, 10, 10, 10, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
134 SpellData(15, 15, 15, 15, 100, 100, 100, 100, 10, 8, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
135 SpellData(20, 20, 20, 20, 240, 240, 240, 240, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
136 SpellData(25, 25, 25, 25, 150, 150, 150, 150, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
137 SpellData(30, 30, 30, 30, 1000, 1000, 1000, 1000, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
138
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
139 SpellData(1, 1, 1, 1, 120, 120, 120, 120, 0, 0, 0), //5 mind
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
140 SpellData(2, 2, 2, 2, 110, 110, 110, 110, 3, 3, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
141 SpellData(3, 3, 3, 3, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
142 SpellData(4, 4, 4, 4, 110, 100, 90, 80, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
143 SpellData(5, 5, 5, 5, 100, 100, 100, 100, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
144 SpellData(8, 8, 8, 8, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
145 SpellData(10, 10, 10, 10, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
146 SpellData(15, 15, 15, 15, 80, 80, 80, 80, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
147 SpellData(20, 20, 20, 20, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
148 SpellData(25, 25, 25, 25, 110, 110, 110, 100, 12, 12, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
149 SpellData(30, 30, 30, 30, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
150
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
151 SpellData(1, 1, 1, 1, 120, 120, 120, 120, 0, 0, 0), //6 body
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
152 SpellData(2, 2, 2, 2, 100, 100, 100, 100, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
153 SpellData(3, 3, 3, 3, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
154 SpellData(4, 4, 4, 4, 110, 100, 90, 80, 8, 2, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
155 SpellData(5, 5, 5, 5, 110, 110, 110, 110, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
156 SpellData(8, 8, 8, 8, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
157 SpellData(10, 10, 10, 10, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
158 SpellData(15, 15, 15, 15, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
159 SpellData(20, 20, 20, 20, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
160 SpellData(25, 25, 25, 25, 110, 110, 110, 100, 30, 5, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
161 SpellData(30, 30, 30, 30, 100, 100, 100, 100, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
162
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
163 SpellData(5, 5, 5, 5, 110, 100, 90, 80, 0, 4, 0), //7 light
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
164 SpellData(10, 10, 10, 10, 120, 110, 100, 90, 16, 16, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
165 SpellData(15, 15, 15, 15, 120, 110, 100, 90, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
166 SpellData(20, 20, 20, 20, 160, 140, 120, 100, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
167 SpellData(25, 25, 25, 25, 140, 140, 140, 140, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
168 SpellData(30, 30, 30, 30, 500, 500, 500, 500, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
169 SpellData(35, 35, 35, 35, 135, 135, 120, 100, 25, 1, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
170 SpellData(40, 40, 40, 40, 500, 500, 500, 500, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
171 SpellData(45, 45, 45, 45, 250, 250, 250, 250, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
172 SpellData(50, 50, 50, 50, 150, 150, 150, 135, 20, 20, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
173 SpellData(55, 55, 55, 55, 300, 300, 300, 300, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
174
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
175 SpellData(10, 10, 10, 10, 140, 140, 140, 140, 0, 0, 0), //8 dark
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
176 SpellData(15, 15, 15, 15, 120, 110, 100, 90, 25, 10, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
177 SpellData(20, 20, 20, 20, 120, 100, 90, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
178 SpellData(25, 25, 25, 25, 120, 120, 120, 120, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
179 SpellData(30, 30, 30, 30, 90, 90, 80, 70, 6, 6, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
180 SpellData(35, 35, 35, 35, 120, 120, 100, 80, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
181 SpellData(40, 40, 40, 40, 110, 110, 110, 110, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
182 SpellData(45, 45, 45, 45, 200, 200, 200, 150, 0, 0, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
183 SpellData(50, 50, 50, 50, 120, 120, 120, 100, 0, 25, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
184 SpellData(55, 55, 55, 55, 250, 250, 250, 250, 50, 1, 0),
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
185 SpellData(60, 60, 60, 60, 300, 300, 300, 300, 25, 8, 0)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
186 }};
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
187
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
188 std::array<unsigned int, 25> wand_spell_ids =
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
189 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
190 // 135 Wand of Fire 136 Wand of Sparks 137 Wand of Poison 138 Wand of Stunning 139 Wand of Harm
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
191 SPELL_FIRE_FIRE_BOLT, SPELL_AIR_SPARKS, SPELL_WATER_POISON_SPRAY, SPELL_EARTH_STUN, SPELL_BODY_HARM,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
192 // 140 Fairy Wand of Light 141 Fairy Wand of Ice 142 Fairy Wand of Lashing 143 Fairy Wand of Mind 144 Fairy Wand of Swarms
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
193 SPELL_LIGHT_LIGHT_BOLT, SPELL_WATER_ICE_BOLT, SPELL_SPIRIT_SPIRIT_LASH, SPELL_MIND_MIND_BLAST, SPELL_EARTH_DEADLY_SWARM,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
194 // 145 Alacorn Wand of Fireballs 146 Alacorn Wand of Acid 147 Alacorn Wand of Lightning 148 Alacorn Wand of Blades 149 Alacorn Wand of Charms
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
195 SPELL_FIRE_FIREBALL, SPELL_WATER_ACID_BURST, SPELL_AIR_LIGHNING_BOLT, SPELL_EARTH_BLADES, SPELL_MIND_CHARM,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
196 // 150 Arcane Wand of Blasting 151 Arcane Wand of The Fist 152 Arcane Wand of Rocks 153 Arcane Wand of Paralyzing 154 Arcane Wand of Clouds
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
197 SPELL_WATER_ICE_BLAST, SPELL_BODY_FLYING_FIST, SPELL_EARTH_ROCK_BLAST, SPELL_LIGHT_PARALYZE, SPELL_DARK_TOXIC_CLOUD,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
198 // 155 Mystic Wand of Implosion 156 Mystic Wand of Distortion 157 Mystic Wand of Sharpmetal 158 Mystic Wand of Shrinking 159 Mystic Wand of Incineration
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
199 SPELL_AIR_IMPLOSION, SPELL_EARTH_MASS_DISTORTION, SPELL_DARK_SHARPMETAL, SPELL_DARK_SHRINKING_RAY, SPELL_FIRE_INCINERATE
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
200 };
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
201
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
202
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
203 std::array<std::array<unsigned char, 12>, 9> pSpellbookSpellIndices = // 4E2430
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
204 {{ //0 1 2 3 4 5 6 7 8 9 10 11
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
205 {0, 3, 1, 8, 11, 7, 4, 10, 6, 2, 5, 9},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
206 {0, 11, 2, 9, 6, 8, 5, 10, 3, 7, 1, 4},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
207 {0, 4, 8, 9, 1, 10, 3, 11, 7, 6, 2, 5},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
208 {0, 7, 10, 8, 2, 11, 1, 5, 3, 6, 4, 9},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
209 {0, 5, 10, 11, 7, 2, 8, 1, 4, 9, 3, 6},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
210 {0, 5, 9, 8, 3, 7, 6, 4, 1, 11, 2, 10},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
211 {0, 1, 6, 9, 3, 5, 8, 11, 7, 10, 4, 2},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
212 {0, 1, 10, 11, 9, 4, 3, 6, 5, 7, 8, 2},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
213 {0, 9, 3, 7, 1, 5, 2, 10, 11, 8, 6, 4}
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
214 }};
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
215
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
216 std::array<std::array<struct SpellBookIconPos, 12>, 9> pIconPos={{
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
217
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
218 { 0, 0, 17, 13, 115, 2, 217, 15,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
219 299, 6, 28, 125, 130, 133, 294, 114,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
220 11, 232, 134, 233, 237, 171, 296, 231},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
221
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
222 { 0, 0, 19, 9, 117, 3, 206, 13,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
223 285, 7, 16, 123, 113, 101, 201, 118,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
224 317, 110, 11, 230, 149, 236, 296, 234},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
225
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
226 { 0, 0, 17, 9, 140, 0, 210, 34,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
227 293, 5, 15, 98, 78, 121, 175, 136,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
228 301, 115, 15, 226, 154, 225, 272, 220},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
229
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
230 { 0, 0, 7, 9, 156, 2, 277, 9,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
231 11, 117, 111, 82, 180, 102, 303, 108,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
232 10, 229, 120, 221, 201, 217, 296, 225},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
233
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
234 { 0, 0, 18, 8, 89, 15, 192, 14,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
235 292, 7, 22, 129, 125, 146, 217, 136,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
236 305, 115, 22, 226, 174, 237, 290, 231},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
237
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
238 { 0, 0, 18, 12, 148, 9, 292, 7,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
239 17, 122, 121, 99, 220, 87, 293, 112,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
240 13, 236, 128, 213, 220, 223, 315, 223},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
241
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
242 { 0, 0, 23, 14, 127, 8, 204, 0,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
243 306, 8, 14, 115, 122, 132, 200, 116,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
244 293, 122, 20, 228, 154, 228, 294, 239},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
245
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
246 { 0, 0, 19, 14, 124, 10, 283, 12,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
247 8, 105, 113, 89, 190, 82, 298, 108,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
248 18, 181, 101, 204, 204, 203, 285, 218},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
249
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
250 { 0, 0, 18, 17, 110, 16, 201, 15,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
251 307, 15, 18, 148, 125, 166, 201, 123,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
252 275, 120, 28, 235, 217, 222, 324, 216}}};
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
253
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
254
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
255 //----- (0042EB31) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
256 bool SpellBuff::NotExpired()
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
257 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
258 return (signed __int64)this->uExpireTime > 0 ? true:false;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
259 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
260
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
261
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
262 //----- (00458585) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
263 void SpellBuff::Reset()
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
264 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
265 uSkill = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
266 uPower = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
267 uExpireTime = 0i64;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
268 uCaster = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
269 uFlags = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
270 if (uOverlayID)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
271 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
272 pOtherOverlayList->pOverlays[uOverlayID - 1].Reset();
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
273 pOtherOverlayList->bRedraw = true;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
274 uOverlayID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
275 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
276 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
277
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
278 //----- (004585CA) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
279 bool SpellBuff::IsBuffExpiredToTime( __int64 time_end )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
280 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
281 if (uExpireTime && (uExpireTime < time_end))
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
282 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
283 uExpireTime = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
284 uPower = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
285 uSkill = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
286 uOverlayID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
287 return true;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
288 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
289 return false;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
290 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
291
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
292 //----- (004584E0) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
293 bool SpellBuff::Apply( signed __int64 uExpireTime, unsigned __int16 uSkillLevel, unsigned __int16 uPower, int uOverlayID, unsigned __int8 caster )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
294 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
295 if (this->uExpireTime && (uExpireTime < this->uExpireTime))
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
296 return false;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
297
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
298 this->uSkill = uSkillLevel;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
299 this->uPower = uPower;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
300 this->uExpireTime = uExpireTime;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
301 if (this->uOverlayID && this->uOverlayID != uOverlayID)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
302 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
303 pOtherOverlayList->pOverlays[this->uOverlayID - 1].Reset();
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
304 pOtherOverlayList->bRedraw = true;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
305 this->uOverlayID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
306 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
307 this->uOverlayID = uOverlayID;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
308 this->uCaster = caster;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
309
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
310 return true;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
311 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
312
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
313 //----- (0045384A) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
314 void SpellStats::Initialize()
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
315 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
316 std::map<std::string, SPELL_SCHOOL, ci_less> spellSchoolMaps;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
317 spellSchoolMaps["fire"] = SPELL_SCHOOL_FIRE;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
318 spellSchoolMaps["air"] = SPELL_SCHOOL_AIR;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
319 spellSchoolMaps["water"] = SPELL_SCHOOL_WATER;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
320 spellSchoolMaps["earth"] = SPELL_SCHOOL_EARTH;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
321 spellSchoolMaps["spirit"] = SPELL_SCHOOL_SPIRIT;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
322 spellSchoolMaps["mind"] = SPELL_SCHOOL_MIND;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
323 spellSchoolMaps["body"] = SPELL_SCHOOL_BODY;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
324 spellSchoolMaps["light"] = SPELL_SCHOOL_LIGHT;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
325 spellSchoolMaps["dark"] = SPELL_SCHOOL_DARK;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
326 spellSchoolMaps["magic"] = SPELL_SCHOOL_MAGIC;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
327
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
328 char* test_string;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
329
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
330 free(pSpellsTXT_Raw);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
331 pSpellsTXT_Raw = (char *)pEvents_LOD->LoadRaw("spells.txt", 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
332
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
333 strtok(pSpellsTXT_Raw, "\r");
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
334 for(int i=1; i<100; ++i)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
335 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
336 if (((i % 11) - 1 )==0)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
337 strtok(NULL, "\r");
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
338 test_string=strtok(NULL, "\r")+1;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
339 auto tokens = Tokenize(test_string, '\t');
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
340 pInfos[i].pName=RemoveQuotes(tokens[2]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
341 auto findResult = spellSchoolMaps.find(tokens[3]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
342 pInfos[i].uSchool = findResult == spellSchoolMaps.end() ? SPELL_SCHOOL_NONE : findResult->second;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
343 pInfos[i].pShortName=RemoveQuotes(tokens[4]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
344 pInfos[i].pDescription=RemoveQuotes(tokens[5]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
345 pInfos[i].pBasicSkillDesc=RemoveQuotes(tokens[6]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
346 pInfos[i].pExpertSkillDesc=RemoveQuotes(tokens[7]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
347 pInfos[i].pMasterSkillDesc=RemoveQuotes(tokens[8]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
348 pInfos[i].pGrandmasterSkillDesc=RemoveQuotes(tokens[9]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
349 pSpellDatas[i].stats |= strchr(tokens[10], 'm') || strchr(tokens[10], 'M') ? 1 : 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
350 pSpellDatas[i].stats |= strchr(tokens[10], 'e') || strchr(tokens[10], 'E') ? 2 : 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
351 pSpellDatas[i].stats |= strchr(tokens[10], 'c') || strchr(tokens[10], 'C') ? 4 : 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
352 pSpellDatas[i].stats |= strchr(tokens[10], 'x') || strchr(tokens[10], 'X') ? 8 : 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
353 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
354 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
355 //----- (00448DF8) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
356 void __fastcall EventCastSpell(int uSpellID, int uSkillLevel, int uSkill, int fromx, int fromy, int fromz, int tox, int toy, int toz)//sub_448DF8
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
357 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
358 int v9; // esi@1
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
359 signed __int64 v10; // st7@4
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
360 signed __int64 v11; // st6@4
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
361 signed __int64 v12; // st5@4
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
362 double v13; // st7@6
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
363 int v14; // ST44_4@7
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
364 uint skillMasteryPlusOne; // ebx@9
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
365 uint v16; // edx@15
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
366 int i; // esi@42
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
367 int j; // esi@60
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
368 unsigned __int64 v36; // qax@99
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
369 // SpellBuff *v37; // ecx@99
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
370 int v38; // esi@103
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
371 signed __int64 v39; // qax@105
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
372 int v42; // esi@111
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
373 int v43; // ebx@111
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
374 int v47; // [sp-4h] [bp-B8h]@35
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
375 int v49; // [sp+0h] [bp-B4h]@35
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
376 int v55; // [sp+28h] [bp-8Ch]@7
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
377 unsigned int yaw; // [sp+30h] [bp-84h]@7
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
378 int pitch; // [sp+34h] [bp-80h]@7
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
379 int v60; // [sp+ACh] [bp-8h]@1
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
380 int a6_4; // [sp+C8h] [bp+14h]@117
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
381 int a7c; // [sp+CCh] [bp+18h]@29
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
382 int a7d; // [sp+CCh] [bp+18h]@55
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
383 signed __int64 xSquared; // [sp+D0h] [bp+1Ch]@6
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
384 int a8b; // [sp+D0h] [bp+1Ch]@37
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
385 int a8c; // [sp+D0h] [bp+1Ch]@55
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
386 signed __int64 ySquared; // [sp+D4h] [bp+20h]@6
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
387
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
388 v9 = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
389 skillMasteryPlusOne = uSkillLevel + 1;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
390 //spellnum_ = uSpellID;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
391 v60 = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
392 if ( tox || toy || toz )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
393 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
394 v10 = tox - fromx;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
395 v11 = toy - fromy;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
396 v12 = toz - fromz;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
397 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
398 else
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
399 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
400 v10 = pParty->vPosition.x - fromx;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
401 v11 = pParty->vPosition.y - fromy;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
402 v12 = (pParty->vPosition.z + pParty->sEyelevel) - fromz;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
403 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
404 v13 = sqrt(long double(v10 * v10 + v11 * v11 + v12 * v12));
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
405 if ( v13 <= 1.0 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
406 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
407 v55 = 1;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
408 yaw = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
409 pitch = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
410 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
411 else
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
412 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
413 v55 = (int)v13;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
414 ySquared = v11 * v11;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
415 xSquared = v10 * v10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
416 v14 = (int)sqrt(long double(xSquared + ySquared));
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
417 yaw = stru_5C6E00->Atan2((int)v10, (int)v11);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
418 pitch = stru_5C6E00->Atan2(v14, (int)v12);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
419 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
420 Assert(skillMasteryPlusOne > 0 && skillMasteryPlusOne <= 4, "Invalid mastery level");
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
421
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
422 SpriteObject a1; // [sp+38h] [bp-7Ch]@12
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
423 //SpriteObject::SpriteObject(&a1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
424
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
425 switch ( uSpellID )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
426 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
427 case SPELL_FIRE_FIRE_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
428 case SPELL_FIRE_FIREBALL:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
429 case SPELL_AIR_LIGHNING_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
430 case SPELL_WATER_ICE_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
431 case SPELL_WATER_ACID_BURST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
432 case SPELL_WATER_ICE_BLAST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
433 case SPELL_EARTH_BLADES:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
434 case SPELL_EARTH_ROCK_BLAST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
435 case SPELL_WATER_POISON_SPRAY:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
436 case SPELL_AIR_SPARKS:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
437 case SPELL_EARTH_DEATH_BLOSSOM:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
438 a1.uType = stru_4E3ACC[uSpellID].uType;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
439 a1.stru_24.Reset();
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
440 a1.spell_id = uSpellID;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
441 a1.spell_level = uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
442 a1.spell_skill = skillMasteryPlusOne;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
443 v16 = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
444 while (v16 < pObjectList->uNumObjects)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
445 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
446 if ( a1.uType == pObjectList->pObjects[v16].uObjectID)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
447 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
448 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
449 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
450 v16++;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
451 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
452 a1.uObjectDescID = v16;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
453 a1.vPosition.x = fromx;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
454 a1.vPosition.y = fromy;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
455 a1.vPosition.z = fromz;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
456 a1.uAttributes = 16;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
457 a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
458 a1.field_60_distance_related_prolly_lod = v55;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
459 a1.uSpriteFrameID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
460 a1.spell_caster_pid = 8000 | OBJECT_Item;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
461 a1.uSoundID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
462 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
463 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
464
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
465 switch ( uSpellID )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
466 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
467 case SPELL_FIRE_FIRE_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
468 case SPELL_FIRE_FIREBALL:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
469 case SPELL_AIR_LIGHNING_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
470 case SPELL_WATER_ICE_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
471 case SPELL_WATER_ACID_BURST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
472 case SPELL_WATER_ICE_BLAST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
473 case SPELL_EARTH_BLADES:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
474 case SPELL_EARTH_ROCK_BLAST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
475 //v20 = yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
476 a1.spell_target_pid = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
477 a1.uFacing = yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
478 a1.uSoundID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
479 v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
480 a1.Create(yaw, pitch, v49, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
481 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
482 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
483 case SPELL_WATER_POISON_SPRAY:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
484 switch ( skillMasteryPlusOne )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
485 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
486 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
487 v60 = 1;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
488 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
489 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
490 v60 = 3;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
491 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
492 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
493 v60 = 5;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
494 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
495 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
496 v60 = 7;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
497 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
498 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
499 a1.spell_target_pid = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
500 a1.uFacing = yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
501 if ( v60 == 1 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
502 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
503 v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
504 a1.Create(yaw, pitch, v49, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
505 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
506 else
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
507 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
508 a7c = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
509 a8b = a7c / (v60 - 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
510 for ( i = a7c / -2; i <= a7c / 2; i += a8b )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
511 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
512 a1.uFacing = i + yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
513 a1.Create((signed __int16)(i + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
514 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
515 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
516 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
517 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
518 case SPELL_AIR_SPARKS:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
519 switch ( skillMasteryPlusOne )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
520 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
521 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
522 v60 = 3;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
523 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
524 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
525 v60 = 5;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
526 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
527 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
528 v60 = 7;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
529 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
530 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
531 v60 = 9;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
532 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
533 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
534 a7d = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
535 a8c = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360 / (v60 - 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
536 a1.spell_target_pid = 4;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
537 for ( j = a7d / -2; j <= a7d / 2; j += a8c )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
538 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
539 a1.uFacing = j + yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
540 a1.Create((signed __int16)(j + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
541 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
542 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
543 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
544 case SPELL_EARTH_DEATH_BLOSSOM:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
545 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
546 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
547 a1.spell_target_pid = 4;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
548 v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
549 v47 = (signed int)stru_5C6E00->uIntegerHalfPi / 2;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
550 a1.Create(yaw, v47, v49, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
551 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
552 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
553
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
554 case SPELL_FIRE_HASTE:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
555 if ( skillMasteryPlusOne > 0 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
556 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
557 if ( skillMasteryPlusOne <= 2 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
558 v9 = 60 * (uSkill + 60);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
559 else if ( skillMasteryPlusOne == 3 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
560 v9 = 180 * (uSkill + 20);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
561 else if ( skillMasteryPlusOne == 4 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
562 v9 = 240 * (uSkill + 15);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
563 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
564 for (uint i = 0; i < 4; ++i)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
565 if (pParty->pPlayers[i].IsWeak())
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
566 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
567 pParty->pPartyBuffs[PARTY_BUFF_HASTE].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)(v9 * 128) * 0.033333335), skillMasteryPlusOne, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
568 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
569 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
570 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
571 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
572 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);//çâóê àëòàðÿ
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
573 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
574 case SPELL_AIR_SHIELD:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
575 case SPELL_EARTH_STONESKIN:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
576 case SPELL_SPIRIT_HEROISM:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
577 switch ( skillMasteryPlusOne )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
578 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
579 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
580 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
581 v9 = 300 * (uSkill + 12);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
582 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
583 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
584 v9 = 900 * (uSkill + 4);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
585 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
586 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
587 v9 = 3600 * (uSkill + 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
588 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
589 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
590 switch ( uSpellID )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
591 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
592 case SPELL_AIR_SHIELD:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
593 v60 = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
594 uSkill = 14;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
595 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
596 case SPELL_EARTH_STONESKIN:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
597 v60 = uSkill + 5;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
598 uSkill = 15;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
599 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
600 case SPELL_SPIRIT_HEROISM:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
601 v60 = uSkill + 5;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
602 uSkill = 9;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
603 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
604 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
605 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
606 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
607 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
608 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
609 v36 = pParty->uTimePlayed + (signed int)(signed __int64)((double)(v9 << 7) * 0.033333335);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
610 pParty->pPartyBuffs[uSkill].Apply(v36, skillMasteryPlusOne, v60, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
611 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
612 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
613 case SPELL_FIRE_IMMOLATION:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
614 if (skillMasteryPlusOne == 4)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
615 v38 = 600 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
616 else
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
617 v38 = 60 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
618 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
619 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
620 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
621 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
622 v39 = (signed __int64)((double)(v38 << 7) * 0.033333335);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
623 v36 = pParty->uTimePlayed + v39;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
624 pParty->pPartyBuffs[PARTY_BUFF_IMMOLATION].Apply(v36, skillMasteryPlusOne, uSkill, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
625 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
626 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
627 case SPELL_FIRE_PROTECTION_FROM_FIRE:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
628 case SPELL_AIR_PROTECTION_FROM_AIR:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
629 case SPELL_WATER_PROTECTION_FROM_WATER:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
630 case SPELL_EARTH_PROTECTION_FROM_EARTH:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
631 case SPELL_MIND_PROTECTION_FROM_MIND:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
632 case SPELL_BODY_PROTECTION_FROM_BODY:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
633 a6_4 = 3600 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
634 switch (skillMasteryPlusOne)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
635 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
636 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
637 v60 = uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
638 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
639 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
640 v60 = 2 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
641 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
642 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
643 v60 = 3 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
644 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
645 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
646 v60 = 4 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
647 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
648 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
649 switch ( uSpellID )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
650 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
651 case SPELL_FIRE_PROTECTION_FROM_FIRE:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
652 uSkill = PARTY_BUFF_RESIST_FIRE;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
653 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
654 case SPELL_AIR_PROTECTION_FROM_AIR:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
655 uSkill = PARTY_BUFF_RESIST_AIR;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
656 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
657 case SPELL_WATER_PROTECTION_FROM_WATER:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
658 uSkill = PARTY_BUFF_RESIST_WATER;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
659 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
660 case SPELL_EARTH_PROTECTION_FROM_EARTH:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
661 uSkill = PARTY_BUFF_RESIST_EARTH;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
662 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
663 case SPELL_MIND_PROTECTION_FROM_MIND:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
664 uSkill = PARTY_BUFF_RESIST_MIND;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
665 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
666 case SPELL_BODY_PROTECTION_FROM_BODY:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
667 uSkill = PARTY_BUFF_RESIST_BODY;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
668 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
669 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
670 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
671 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
672 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
673 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
674 pParty->pPartyBuffs[uSkill].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)a6_4 * 4.2666669), skillMasteryPlusOne, v60, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
675 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
676 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
677 case SPELL_LIGHT_DAY_OF_THE_GODS :
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
678 switch (skillMasteryPlusOne)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
679 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
680 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
681 v42 = 10800 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
682 v43 = 3 * uSkill + 10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
683 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
684 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
685 v42 = 18000 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
686 v43 = 5 * uSkill + 10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
687 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
688 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
689 v42 = 14400 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
690 v43 = 4 * uSkill + 10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
691 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
692 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
693 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
694 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
695 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
696 pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
697 v39 = (signed __int64)((double)(v42 << 7) * 0.033333335);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
698 v36 = pParty->uTimePlayed + v39;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
699 pParty->pPartyBuffs[PARTY_BUFF_DAY_OF_GODS].Apply(v36, skillMasteryPlusOne, v43, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
700 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
701 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
702 default:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
703 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
704 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
705 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
706 //----- (00427769) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
707 bool sub_427769_isSpellQuickCastableOnShiftClick(unsigned int uSpellID)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
708 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
709 return ( pSpellDatas[uSpellID].stats & 0xC ) != 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
710 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
711 //----- (0043AFE3) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
712 int _43AFE3_calc_spell_damage(int spellId, int spellLevel, signed int skillMastery, int currentHp)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
713 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
714 int result; // eax@1
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
715 unsigned int v5; // [sp-4h] [bp-8h]@9
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
716
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
717 result = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
718 if ( spellId == SPELL_FIRE_FIRE_SPIKE )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
719 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
720 switch (skillMastery)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
721 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
722 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
723 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
724 v5 = 6;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
725 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
726 v5 = 8;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
727 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
728 v5 = 10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
729 default:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
730 return 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
731 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
732 result = GetDiceResult(spellLevel, v5);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
733 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
734 else if ( spellId == SPELL_EARTH_MASS_DISTORTION )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
735 result = currentHp * (pSpellDatas[SPELL_EARTH_MASS_DISTORTION].baseDamage + 2 * spellLevel) / 100;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
736 else
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
737 result = pSpellDatas[spellId].baseDamage
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
738 + GetDiceResult(spellLevel, pSpellDatas[spellId].bonusSkillDamage);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
739
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
740 return result;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
741 }