annotate Engine/Spells/Spells.cpp @ 2553:48708da03b7f

Party Creation UI logic separated from MainMenu
author a.parshin
date Wed, 13 May 2015 02:20:05 +0200
parents 3121fb54a110
children 30eb6dcac768
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>
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
7
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
8 #include "Engine/Engine.h"
2499
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
9
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
10 #include "Spells.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
11 #include "Engine/Graphics/Overlays.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
12 #include "../LOD.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
13 #include "../texts.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
14
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
15 #include "../Party.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
16 #include "../OurMath.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
17 #include "Engine/Objects/SpriteObject.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
18 #include "Engine/Objects/ObjectList.h"
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
19 #include "Engine/Graphics/Indoor.h"
2502
a77c34acdbc9 Media folder
Ritor1
parents: 2499
diff changeset
20 #include "Media/Audio/AudioPlayer.h"
2499
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
21 #include "Engine/Objects/Actor.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<struct SpellBookIconPos, 12>, 9> pIconPos={{
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
204
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
205 { 0, 0, 17, 13, 115, 2, 217, 15,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
206 299, 6, 28, 125, 130, 133, 294, 114,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
207 11, 232, 134, 233, 237, 171, 296, 231},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
208
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
209 { 0, 0, 19, 9, 117, 3, 206, 13,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
210 285, 7, 16, 123, 113, 101, 201, 118,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
211 317, 110, 11, 230, 149, 236, 296, 234},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
212
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
213 { 0, 0, 17, 9, 140, 0, 210, 34,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
214 293, 5, 15, 98, 78, 121, 175, 136,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
215 301, 115, 15, 226, 154, 225, 272, 220},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
216
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
217 { 0, 0, 7, 9, 156, 2, 277, 9,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
218 11, 117, 111, 82, 180, 102, 303, 108,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
219 10, 229, 120, 221, 201, 217, 296, 225},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
220
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
221 { 0, 0, 18, 8, 89, 15, 192, 14,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
222 292, 7, 22, 129, 125, 146, 217, 136,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
223 305, 115, 22, 226, 174, 237, 290, 231},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
224
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
225 { 0, 0, 18, 12, 148, 9, 292, 7,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
226 17, 122, 121, 99, 220, 87, 293, 112,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
227 13, 236, 128, 213, 220, 223, 315, 223},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
228
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
229 { 0, 0, 23, 14, 127, 8, 204, 0,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
230 306, 8, 14, 115, 122, 132, 200, 116,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
231 293, 122, 20, 228, 154, 228, 294, 239},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
232
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
233 { 0, 0, 19, 14, 124, 10, 283, 12,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
234 8, 105, 113, 89, 190, 82, 298, 108,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
235 18, 181, 101, 204, 204, 203, 285, 218},
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
236
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
237 { 0, 0, 18, 17, 110, 16, 201, 15,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
238 307, 15, 18, 148, 125, 166, 201, 123,
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
239 275, 120, 28, 235, 217, 222, 324, 216}}};
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
240
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
241
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
242 //----- (0042EB31) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
243 bool SpellBuff::NotExpired()
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
244 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
245 return (signed __int64)this->uExpireTime > 0 ? true:false;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
246 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
247
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
248
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
249 //----- (00458585) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
250 void SpellBuff::Reset()
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
251 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
252 uSkill = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
253 uPower = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
254 uExpireTime = 0i64;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
255 uCaster = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
256 uFlags = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
257 if (uOverlayID)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
258 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
259 pOtherOverlayList->pOverlays[uOverlayID - 1].Reset();
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
260 pOtherOverlayList->bRedraw = true;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
261 uOverlayID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
262 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
263 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
264
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
265 //----- (004585CA) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
266 bool SpellBuff::IsBuffExpiredToTime( __int64 time_end )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
267 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
268 if (uExpireTime && (uExpireTime < time_end))
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
269 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
270 uExpireTime = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
271 uPower = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
272 uSkill = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
273 uOverlayID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
274 return true;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
275 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
276 return false;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
277 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
278
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
279 //----- (004584E0) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
280 bool SpellBuff::Apply( signed __int64 uExpireTime, unsigned __int16 uSkillLevel, unsigned __int16 uPower, int uOverlayID, unsigned __int8 caster )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
281 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
282 if (this->uExpireTime && (uExpireTime < this->uExpireTime))
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
283 return false;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
284
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
285 this->uSkill = uSkillLevel;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
286 this->uPower = uPower;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
287 this->uExpireTime = uExpireTime;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
288 if (this->uOverlayID && this->uOverlayID != uOverlayID)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
289 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
290 pOtherOverlayList->pOverlays[this->uOverlayID - 1].Reset();
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
291 pOtherOverlayList->bRedraw = true;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
292 this->uOverlayID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
293 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
294 this->uOverlayID = uOverlayID;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
295 this->uCaster = caster;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
296
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
297 return true;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
298 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
299
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
300 //----- (0045384A) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
301 void SpellStats::Initialize()
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
302 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
303 std::map<std::string, SPELL_SCHOOL, ci_less> spellSchoolMaps;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
304 spellSchoolMaps["fire"] = SPELL_SCHOOL_FIRE;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
305 spellSchoolMaps["air"] = SPELL_SCHOOL_AIR;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
306 spellSchoolMaps["water"] = SPELL_SCHOOL_WATER;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
307 spellSchoolMaps["earth"] = SPELL_SCHOOL_EARTH;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
308 spellSchoolMaps["spirit"] = SPELL_SCHOOL_SPIRIT;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
309 spellSchoolMaps["mind"] = SPELL_SCHOOL_MIND;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
310 spellSchoolMaps["body"] = SPELL_SCHOOL_BODY;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
311 spellSchoolMaps["light"] = SPELL_SCHOOL_LIGHT;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
312 spellSchoolMaps["dark"] = SPELL_SCHOOL_DARK;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
313 spellSchoolMaps["magic"] = SPELL_SCHOOL_MAGIC;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
314
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
315 char* test_string;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
316
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
317 free(pSpellsTXT_Raw);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
318 pSpellsTXT_Raw = (char *)pEvents_LOD->LoadRaw("spells.txt", 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
319
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
320 strtok(pSpellsTXT_Raw, "\r");
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
321 for(int i=1; i<100; ++i)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
322 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
323 if (((i % 11) - 1 )==0)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
324 strtok(NULL, "\r");
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
325 test_string=strtok(NULL, "\r")+1;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
326 auto tokens = Tokenize(test_string, '\t');
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
327 pInfos[i].pName=RemoveQuotes(tokens[2]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
328 auto findResult = spellSchoolMaps.find(tokens[3]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
329 pInfos[i].uSchool = findResult == spellSchoolMaps.end() ? SPELL_SCHOOL_NONE : findResult->second;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
330 pInfos[i].pShortName=RemoveQuotes(tokens[4]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
331 pInfos[i].pDescription=RemoveQuotes(tokens[5]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
332 pInfos[i].pBasicSkillDesc=RemoveQuotes(tokens[6]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
333 pInfos[i].pExpertSkillDesc=RemoveQuotes(tokens[7]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
334 pInfos[i].pMasterSkillDesc=RemoveQuotes(tokens[8]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
335 pInfos[i].pGrandmasterSkillDesc=RemoveQuotes(tokens[9]);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
336 pSpellDatas[i].stats |= strchr(tokens[10], 'm') || strchr(tokens[10], 'M') ? 1 : 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
337 pSpellDatas[i].stats |= strchr(tokens[10], 'e') || strchr(tokens[10], 'E') ? 2 : 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
338 pSpellDatas[i].stats |= strchr(tokens[10], 'c') || strchr(tokens[10], 'C') ? 4 : 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
339 pSpellDatas[i].stats |= strchr(tokens[10], 'x') || strchr(tokens[10], 'X') ? 8 : 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
340 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
341 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
342 //----- (00448DF8) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
343 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
344 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
345 int v9; // esi@1
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
346 signed __int64 v10; // st7@4
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
347 signed __int64 v11; // st6@4
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
348 signed __int64 v12; // st5@4
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
349 double v13; // st7@6
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
350 int v14; // ST44_4@7
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
351 uint skillMasteryPlusOne; // ebx@9
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
352 uint v16; // edx@15
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
353 int i; // esi@42
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
354 int j; // esi@60
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
355 unsigned __int64 v36; // qax@99
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
356 // SpellBuff *v37; // ecx@99
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
357 int v38; // esi@103
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
358 signed __int64 v39; // qax@105
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
359 int v42; // esi@111
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
360 int v43; // ebx@111
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
361 int v47; // [sp-4h] [bp-B8h]@35
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
362 int v49; // [sp+0h] [bp-B4h]@35
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
363 int v55; // [sp+28h] [bp-8Ch]@7
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
364 unsigned int yaw; // [sp+30h] [bp-84h]@7
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
365 int pitch; // [sp+34h] [bp-80h]@7
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
366 int v60; // [sp+ACh] [bp-8h]@1
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
367 int a6_4; // [sp+C8h] [bp+14h]@117
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
368 int a7c; // [sp+CCh] [bp+18h]@29
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
369 int a7d; // [sp+CCh] [bp+18h]@55
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
370 signed __int64 xSquared; // [sp+D0h] [bp+1Ch]@6
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
371 int a8b; // [sp+D0h] [bp+1Ch]@37
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
372 int a8c; // [sp+D0h] [bp+1Ch]@55
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
373 signed __int64 ySquared; // [sp+D4h] [bp+20h]@6
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
374
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
375 v9 = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
376 skillMasteryPlusOne = uSkillLevel + 1;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
377 //spellnum_ = uSpellID;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
378 v60 = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
379 if ( tox || toy || toz )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
380 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
381 v10 = tox - fromx;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
382 v11 = toy - fromy;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
383 v12 = toz - fromz;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
384 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
385 else
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
386 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
387 v10 = pParty->vPosition.x - fromx;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
388 v11 = pParty->vPosition.y - fromy;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
389 v12 = (pParty->vPosition.z + pParty->sEyelevel) - fromz;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
390 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
391 v13 = sqrt(long double(v10 * v10 + v11 * v11 + v12 * v12));
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
392 if ( v13 <= 1.0 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
393 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
394 v55 = 1;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
395 yaw = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
396 pitch = 0;
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 v55 = (int)v13;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
401 ySquared = v11 * v11;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
402 xSquared = v10 * v10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
403 v14 = (int)sqrt(long double(xSquared + ySquared));
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
404 yaw = stru_5C6E00->Atan2((int)v10, (int)v11);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
405 pitch = stru_5C6E00->Atan2(v14, (int)v12);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
406 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
407 Assert(skillMasteryPlusOne > 0 && skillMasteryPlusOne <= 4, "Invalid mastery level");
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
408
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
409 SpriteObject a1; // [sp+38h] [bp-7Ch]@12
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
410 //SpriteObject::SpriteObject(&a1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
411
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
412 switch ( uSpellID )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
413 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
414 case SPELL_FIRE_FIRE_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
415 case SPELL_FIRE_FIREBALL:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
416 case SPELL_AIR_LIGHNING_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
417 case SPELL_WATER_ICE_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
418 case SPELL_WATER_ACID_BURST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
419 case SPELL_WATER_ICE_BLAST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
420 case SPELL_EARTH_BLADES:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
421 case SPELL_EARTH_ROCK_BLAST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
422 case SPELL_WATER_POISON_SPRAY:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
423 case SPELL_AIR_SPARKS:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
424 case SPELL_EARTH_DEATH_BLOSSOM:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
425 a1.uType = stru_4E3ACC[uSpellID].uType;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
426 a1.stru_24.Reset();
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
427 a1.spell_id = uSpellID;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
428 a1.spell_level = uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
429 a1.spell_skill = skillMasteryPlusOne;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
430 v16 = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
431 while (v16 < pObjectList->uNumObjects)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
432 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
433 if ( a1.uType == pObjectList->pObjects[v16].uObjectID)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
434 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
435 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
436 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
437 v16++;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
438 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
439 a1.uObjectDescID = v16;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
440 a1.vPosition.x = fromx;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
441 a1.vPosition.y = fromy;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
442 a1.vPosition.z = fromz;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
443 a1.uAttributes = 16;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
444 a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
445 a1.field_60_distance_related_prolly_lod = v55;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
446 a1.uSpriteFrameID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
447 a1.spell_caster_pid = 8000 | OBJECT_Item;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
448 a1.uSoundID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
449 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
450 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
451
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
452 switch ( uSpellID )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
453 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
454 case SPELL_FIRE_FIRE_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
455 case SPELL_FIRE_FIREBALL:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
456 case SPELL_AIR_LIGHNING_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
457 case SPELL_WATER_ICE_BOLT:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
458 case SPELL_WATER_ACID_BURST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
459 case SPELL_WATER_ICE_BLAST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
460 case SPELL_EARTH_BLADES:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
461 case SPELL_EARTH_ROCK_BLAST:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
462 //v20 = yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
463 a1.spell_target_pid = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
464 a1.uFacing = yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
465 a1.uSoundID = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
466 v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
467 a1.Create(yaw, pitch, v49, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
468 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
469 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
470 case SPELL_WATER_POISON_SPRAY:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
471 switch ( skillMasteryPlusOne )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
472 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
473 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
474 v60 = 1;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
475 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
476 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
477 v60 = 3;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
478 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
479 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
480 v60 = 5;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
481 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
482 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
483 v60 = 7;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
484 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
485 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
486 a1.spell_target_pid = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
487 a1.uFacing = yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
488 if ( v60 == 1 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
489 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
490 v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
491 a1.Create(yaw, pitch, v49, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
492 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
493 else
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
494 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
495 a7c = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
496 a8b = a7c / (v60 - 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
497 for ( i = a7c / -2; i <= a7c / 2; i += a8b )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
498 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
499 a1.uFacing = i + yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
500 a1.Create((signed __int16)(i + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
501 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
502 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
503 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
504 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
505 case SPELL_AIR_SPARKS:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
506 switch ( skillMasteryPlusOne )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
507 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
508 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
509 v60 = 3;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
510 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
511 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
512 v60 = 5;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
513 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
514 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
515 v60 = 7;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
516 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
517 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
518 v60 = 9;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
519 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
520 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
521 a7d = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
522 a8c = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360 / (v60 - 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
523 a1.spell_target_pid = 4;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
524 for ( j = a7d / -2; j <= a7d / 2; j += a8c )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
525 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
526 a1.uFacing = j + yaw;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
527 a1.Create((signed __int16)(j + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
528 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
529 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
530 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
531 case SPELL_EARTH_DEATH_BLOSSOM:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
532 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
533 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
534 a1.spell_target_pid = 4;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
535 v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
536 v47 = (signed int)stru_5C6E00->uIntegerHalfPi / 2;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
537 a1.Create(yaw, v47, v49, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
538 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
539 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
540
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
541 case SPELL_FIRE_HASTE:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
542 if ( skillMasteryPlusOne > 0 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
543 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
544 if ( skillMasteryPlusOne <= 2 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
545 v9 = 60 * (uSkill + 60);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
546 else if ( skillMasteryPlusOne == 3 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
547 v9 = 180 * (uSkill + 20);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
548 else if ( skillMasteryPlusOne == 4 )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
549 v9 = 240 * (uSkill + 15);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
550 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
551 for (uint i = 0; i < 4; ++i)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
552 if (pParty->pPlayers[i].IsWeak())
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
553 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
554 pParty->pPartyBuffs[PARTY_BUFF_HASTE].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)(v9 * 128) * 0.033333335), skillMasteryPlusOne, 0, 0, 0);
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
555 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
556 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
557 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
558 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
2499
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
559 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);//çâóê àëòàðÿ
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
560 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
561 case SPELL_AIR_SHIELD:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
562 case SPELL_EARTH_STONESKIN:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
563 case SPELL_SPIRIT_HEROISM:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
564 switch ( skillMasteryPlusOne )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
565 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
566 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
567 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
568 v9 = 300 * (uSkill + 12);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
569 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
570 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
571 v9 = 900 * (uSkill + 4);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
572 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
573 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
574 v9 = 3600 * (uSkill + 1);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
575 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
576 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
577 switch ( uSpellID )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
578 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
579 case SPELL_AIR_SHIELD:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
580 v60 = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
581 uSkill = 14;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
582 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
583 case SPELL_EARTH_STONESKIN:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
584 v60 = uSkill + 5;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
585 uSkill = 15;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
586 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
587 case SPELL_SPIRIT_HEROISM:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
588 v60 = uSkill + 5;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
589 uSkill = 9;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
590 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
591 }
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
592 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
593 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
594 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
595 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
2499
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
596 v36 = pParty->uTimePlayed + (signed int)(signed __int64)((double)(v9 << 7) * 0.033333335);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
597 pParty->pPartyBuffs[uSkill].Apply(v36, skillMasteryPlusOne, v60, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
598 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
599 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
600 case SPELL_FIRE_IMMOLATION:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
601 if (skillMasteryPlusOne == 4)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
602 v38 = 600 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
603 else
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
604 v38 = 60 * uSkill;
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
605 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
606 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
607 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
608 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
2499
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
609 v39 = (signed __int64)((double)(v38 << 7) * 0.033333335);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
610 v36 = pParty->uTimePlayed + v39;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
611 pParty->pPartyBuffs[PARTY_BUFF_IMMOLATION].Apply(v36, skillMasteryPlusOne, uSkill, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
612 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
613 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
614 case SPELL_FIRE_PROTECTION_FROM_FIRE:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
615 case SPELL_AIR_PROTECTION_FROM_AIR:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
616 case SPELL_WATER_PROTECTION_FROM_WATER:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
617 case SPELL_EARTH_PROTECTION_FROM_EARTH:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
618 case SPELL_MIND_PROTECTION_FROM_MIND:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
619 case SPELL_BODY_PROTECTION_FROM_BODY:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
620 a6_4 = 3600 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
621 switch (skillMasteryPlusOne)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
622 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
623 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
624 v60 = uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
625 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
626 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
627 v60 = 2 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
628 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
629 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
630 v60 = 3 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
631 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
632 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
633 v60 = 4 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
634 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
635 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
636 switch ( uSpellID )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
637 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
638 case SPELL_FIRE_PROTECTION_FROM_FIRE:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
639 uSkill = PARTY_BUFF_RESIST_FIRE;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
640 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
641 case SPELL_AIR_PROTECTION_FROM_AIR:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
642 uSkill = PARTY_BUFF_RESIST_AIR;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
643 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
644 case SPELL_WATER_PROTECTION_FROM_WATER:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
645 uSkill = PARTY_BUFF_RESIST_WATER;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
646 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
647 case SPELL_EARTH_PROTECTION_FROM_EARTH:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
648 uSkill = PARTY_BUFF_RESIST_EARTH;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
649 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
650 case SPELL_MIND_PROTECTION_FROM_MIND:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
651 uSkill = PARTY_BUFF_RESIST_MIND;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
652 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
653 case SPELL_BODY_PROTECTION_FROM_BODY:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
654 uSkill = PARTY_BUFF_RESIST_BODY;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
655 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
656 }
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
657 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
658 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
659 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
660 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
2499
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
661 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
662 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
663 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
664 case SPELL_LIGHT_DAY_OF_THE_GODS :
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
665 switch (skillMasteryPlusOne)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
666 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
667 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
668 v42 = 10800 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
669 v43 = 3 * uSkill + 10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
670 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
671 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
672 v42 = 18000 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
673 v43 = 5 * uSkill + 10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
674 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
675 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
676 v42 = 14400 * uSkill;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
677 v43 = 4 * uSkill + 10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
678 break;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
679 }
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
680 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
681 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
682 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2);
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2502
diff changeset
683 pEngine->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3);
2499
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
684 v39 = (signed __int64)((double)(v42 << 7) * 0.033333335);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
685 v36 = pParty->uTimePlayed + v39;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
686 pParty->pPartyBuffs[PARTY_BUFF_DAY_OF_GODS].Apply(v36, skillMasteryPlusOne, v43, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
687 pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
688 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
689 default:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
690 return;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
691 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
692 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
693 //----- (00427769) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
694 bool sub_427769_isSpellQuickCastableOnShiftClick(unsigned int uSpellID)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
695 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
696 return ( pSpellDatas[uSpellID].stats & 0xC ) != 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
697 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
698 //----- (0043AFE3) --------------------------------------------------------
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
699 int _43AFE3_calc_spell_damage(int spellId, int spellLevel, signed int skillMastery, int currentHp)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
700 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
701 int result; // eax@1
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
702 unsigned int v5; // [sp-4h] [bp-8h]@9
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
703
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
704 result = 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
705 if ( spellId == SPELL_FIRE_FIRE_SPIKE )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
706 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
707 switch (skillMastery)
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
708 {
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
709 case 1:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
710 case 2:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
711 v5 = 6;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
712 case 3:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
713 v5 = 8;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
714 case 4:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
715 v5 = 10;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
716 default:
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
717 return 0;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
718 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
719 result = GetDiceResult(spellLevel, v5);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
720 }
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
721 else if ( spellId == SPELL_EARTH_MASS_DISTORTION )
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
722 result = currentHp * (pSpellDatas[SPELL_EARTH_MASS_DISTORTION].baseDamage + 2 * spellLevel) / 100;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
723 else
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
724 result = pSpellDatas[spellId].baseDamage
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
725 + GetDiceResult(spellLevel, pSpellDatas[spellId].bonusSkillDamage);
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
726
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
727 return result;
68cdef6879a0 engine folder
Ritor1
parents:
diff changeset
728 }