1 ///////////////////////////////////////////////////////////////////////////////
2 // Copyright (C) 2004-2010 by The Allacrost Project
3 // All Rights Reserved
4 //
5 // This code is licensed under the GNU GPL version 2. It is free software
6 // and you may modify it and/or redistribute it under the terms of this license.
7 // See http://www.gnu.org/copyleft/gpl.html for details.
8 ///////////////////////////////////////////////////////////////////////////////
9
10 /** ***************************************************************************
11 *** \file defs_global.cpp
12 *** \author Daniel Steuernol, steu@allacrost.org
13 *** \brief Source file for Lua binding code
14 ***
15 *** All binding code for the globals is contained within this file.
16 *** Therefore, everything that you see bound within this file will be made
17 *** available in Lua. All binding code is contained within this single file
18 *** because the binding code greatly increases the compilation time, but this
19 *** effect is mitigated if it is contained within a single file (Note: Binding
20 *** is now split out according to dependency level (engine, global, modes).
21 ***
22 *** \note To most C++ programmers, the syntax of the binding code found in this
23 *** file may be very unfamiliar and obtuse. Refer to the Luabind documentation
24 *** as necessary to gain an understanding of this code style.
25 *** **************************************************************************/
26
27 #include "defs.h"
28
29 #include "global.h"
30 #include "global_actors.h"
31 #include "global_effects.h"
32 #include "global_objects.h"
33 #include "global_skills.h"
34 #include "global_utils.h"
35
36 using namespace luabind;
37
38 namespace hoa_defs {
39
BindGlobalsToLua()40 void BindGlobalsToLua()
41 {
42 // ---------- Bind Global Components
43 {
44 using namespace hoa_global;
45
46 def("GetTargetText", &GetTargetText),
47 def("IsTargetPoint", &IsTargetPoint),
48 def("IsTargetActor", &IsTargetActor),
49 def("IsTargetParty", &IsTargetParty),
50 def("IsTargetSelf", &IsTargetSelf),
51 def("IsTargetAlly", &IsTargetAlly),
52 def("IsTargetFoe", &IsTargetFoe),
53 // TODO: Luabind doesn't like these functions. I think its because they take reference arguments.
54 // def("IncrementIntensity", &IncrementIntensity),
55 // def("DecrementIntensity", &DecrementIntensity),
56
57 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
58 [
59 class_<GameGlobal>("GameGlobal")
60 .def("AddCharacter", (void(GameGlobal::*)(uint32)) &GameGlobal::AddCharacter)
61 .def("RemoveCharacter", (void(GameGlobal::*)(uint32)) &GameGlobal::RemoveCharacter)
62 .def("GetCharacter", &GameGlobal::GetCharacter)
63 .def("GetDrunes", &GameGlobal::GetDrunes)
64 .def("SetDrunes", &GameGlobal::SetDrunes)
65 .def("AddDrunes", &GameGlobal::AddDrunes)
66 .def("SubtractDrunes", &GameGlobal::SubtractDrunes)
67 .def("AddToInventory", (void (GameGlobal::*)(uint32, uint32)) &GameGlobal::AddToInventory)
68 .def("RemoveFromInventory", (void (GameGlobal::*)(uint32)) &GameGlobal::RemoveFromInventory)
69 .def("IncrementObjectCount", &GameGlobal::IncrementObjectCount)
70 .def("DecrementObjectCount", &GameGlobal::DecrementObjectCount)
71 .def("DoesEventGroupExist", &GameGlobal::DoesEventGroupExist)
72 .def("DoesEventExist", &GameGlobal::DoesEventExist)
73 .def("AddNewEventGroup", &GameGlobal::AddNewEventGroup)
74 .def("GetEventGroup", &GameGlobal::GetEventGroup)
75 .def("GetEventValue", &GameGlobal::GetEventValue)
76 .def("GetNumberEventGroups", &GameGlobal::GetNumberEventGroups)
77 .def("GetNumberEvents", &GameGlobal::GetNumberEvents)
78 .def("SetLocation", (void(GameGlobal::*)(const std::string&)) &GameGlobal::SetLocation)
79
80 // Namespace constants
81 .enum_("constants") [
82 // Character type constants
83 value("GLOBAL_CHARACTER_INVALID", GLOBAL_CHARACTER_INVALID),
84 value("GLOBAL_CHARACTER_ALL", GLOBAL_CHARACTER_ALL),
85 // Object type constants
86 value("GLOBAL_OBJECT_INVALID", GLOBAL_OBJECT_INVALID),
87 value("GLOBAL_OBJECT_ITEM", GLOBAL_OBJECT_ITEM),
88 value("GLOBAL_OBJECT_WEAPON", GLOBAL_OBJECT_WEAPON),
89 value("GLOBAL_OBJECT_HEAD_ARMOR", GLOBAL_OBJECT_HEAD_ARMOR),
90 value("GLOBAL_OBJECT_TORSO_ARMOR", GLOBAL_OBJECT_TORSO_ARMOR),
91 value("GLOBAL_OBJECT_ARM_ARMOR", GLOBAL_OBJECT_ARM_ARMOR),
92 value("GLOBAL_OBJECT_LEG_ARMOR", GLOBAL_OBJECT_LEG_ARMOR),
93 value("GLOBAL_OBJECT_SHARD", GLOBAL_OBJECT_SHARD),
94 value("GLOBAL_OBJECT_KEY_ITEM", GLOBAL_OBJECT_KEY_ITEM),
95 // Item usage constants
96 value("GLOBAL_USE_INVALID", GLOBAL_USE_INVALID),
97 value("GLOBAL_USE_FIELD", GLOBAL_USE_FIELD),
98 value("GLOBAL_USE_BATTLE", GLOBAL_USE_BATTLE),
99 value("GLOBAL_USE_ALL", GLOBAL_USE_ALL),
100 // Item and skill alignment constants
101 value("GLOBAL_POSITION_HEAD", GLOBAL_POSITION_HEAD),
102 value("GLOBAL_POSITION_TORSO", GLOBAL_POSITION_TORSO),
103 value("GLOBAL_POSITION_ARMS", GLOBAL_POSITION_ARMS),
104 value("GLOBAL_POSITION_LEGS", GLOBAL_POSITION_LEGS),
105 // Global skill types
106 value("GLOBAL_SKILL_INVALID", GLOBAL_SKILL_INVALID),
107 value("GLOBAL_SKILL_ATTACK", GLOBAL_SKILL_ATTACK),
108 value("GLOBAL_SKILL_DEFEND", GLOBAL_SKILL_DEFEND),
109 value("GLOBAL_SKILL_SUPPORT", GLOBAL_SKILL_SUPPORT),
110 // Elemental type constants
111 value("GLOBAL_ELEMENTAL_FIRE", GLOBAL_ELEMENTAL_FIRE),
112 value("GLOBAL_ELEMENTAL_WATER", GLOBAL_ELEMENTAL_WATER),
113 value("GLOBAL_ELEMENTAL_VOLT", GLOBAL_ELEMENTAL_VOLT),
114 value("GLOBAL_ELEMENTAL_EARTH", GLOBAL_ELEMENTAL_EARTH),
115 value("GLOBAL_ELEMENTAL_SLICING", GLOBAL_ELEMENTAL_SLICING),
116 value("GLOBAL_ELEMENTAL_SMASHING", GLOBAL_ELEMENTAL_SMASHING),
117 value("GLOBAL_ELEMENTAL_MAULING", GLOBAL_ELEMENTAL_MAULING),
118 value("GLOBAL_ELEMENTAL_PIERCING", GLOBAL_ELEMENTAL_PIERCING),
119 // Status type constants
120 value("GLOBAL_STATUS_HP_BOOST", GLOBAL_STATUS_HP_BOOST),
121 value("GLOBAL_STATUS_HP_DRAIN", GLOBAL_STATUS_HP_DRAIN),
122 value("GLOBAL_STATUS_SP_BOOST", GLOBAL_STATUS_SP_BOOST),
123 value("GLOBAL_STATUS_SP_DRAIN", GLOBAL_STATUS_SP_DRAIN),
124 value("GLOBAL_STATUS_STRENGTH_BOOST", GLOBAL_STATUS_STRENGTH_BOOST),
125 value("GLOBAL_STATUS_STRENGTH_DRAIN", GLOBAL_STATUS_STRENGTH_DRAIN),
126 value("GLOBAL_STATUS_VIGOR_BOOST", GLOBAL_STATUS_VIGOR_BOOST),
127 value("GLOBAL_STATUS_VIGOR_DRAIN", GLOBAL_STATUS_VIGOR_DRAIN),
128 value("GLOBAL_STATUS_FORTITUDE_BOOST", GLOBAL_STATUS_FORTITUDE_BOOST),
129 value("GLOBAL_STATUS_FORTITUDE_DRAIN", GLOBAL_STATUS_FORTITUDE_DRAIN),
130 value("GLOBAL_STATUS_PROTECTION_BOOST", GLOBAL_STATUS_PROTECTION_BOOST),
131 value("GLOBAL_STATUS_PROTECTION_DRAIN", GLOBAL_STATUS_PROTECTION_DRAIN),
132 value("GLOBAL_STATUS_AGILITY_BOOST", GLOBAL_STATUS_AGILITY_BOOST),
133 value("GLOBAL_STATUS_AGILITY_DRAIN", GLOBAL_STATUS_AGILITY_DRAIN),
134 value("GLOBAL_STATUS_EVADE_BOOST", GLOBAL_STATUS_EVADE_BOOST),
135 value("GLOBAL_STATUS_EVADE_DRAIN", GLOBAL_STATUS_EVADE_DRAIN),
136 value("GLOBAL_STATUS_PARALYSIS", GLOBAL_STATUS_PARALYSIS),
137 // Intensity type constants
138 value("GLOBAL_INTENSITY_NEG_EXTREME", GLOBAL_INTENSITY_NEG_EXTREME),
139 value("GLOBAL_INTENSITY_NEG_GREATER", GLOBAL_INTENSITY_NEG_GREATER),
140 value("GLOBAL_INTENSITY_NEG_MODERATE", GLOBAL_INTENSITY_NEG_MODERATE),
141 value("GLOBAL_INTENSITY_NEG_LESSER", GLOBAL_INTENSITY_NEG_LESSER),
142 value("GLOBAL_INTENSITY_NEUTRAL", GLOBAL_INTENSITY_NEUTRAL),
143 value("GLOBAL_INTENSITY_POS_LESSER", GLOBAL_INTENSITY_POS_LESSER),
144 value("GLOBAL_INTENSITY_POS_MODERATE", GLOBAL_INTENSITY_POS_MODERATE),
145 value("GLOBAL_INTENSITY_POS_GREATER", GLOBAL_INTENSITY_POS_GREATER),
146 value("GLOBAL_INTENSITY_POS_EXTREME", GLOBAL_INTENSITY_POS_EXTREME),
147 // Target constants
148 value("GLOBAL_TARGET_INVALID", GLOBAL_TARGET_INVALID),
149 value("GLOBAL_TARGET_SELF_POINT", GLOBAL_TARGET_SELF_POINT),
150 value("GLOBAL_TARGET_ALLY_POINT", GLOBAL_TARGET_ALLY_POINT),
151 value("GLOBAL_TARGET_FOE_POINT", GLOBAL_TARGET_FOE_POINT),
152 value("GLOBAL_TARGET_SELF", GLOBAL_TARGET_SELF),
153 value("GLOBAL_TARGET_ALLY", GLOBAL_TARGET_ALLY),
154 value("GLOBAL_TARGET_FOE", GLOBAL_TARGET_FOE),
155 value("GLOBAL_TARGET_ALL_ALLIES", GLOBAL_TARGET_ALL_ALLIES),
156 value("GLOBAL_TARGET_ALL_FOES", GLOBAL_TARGET_ALL_FOES)
157 ]
158 ];
159
160 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
161 [
162 class_<GlobalEventGroup>("GlobalEventGroup")
163 .def("DoesEventExist", &GlobalEventGroup::DoesEventExist)
164 .def("AddNewEvent", &GlobalEventGroup::AddNewEvent)
165 .def("GetEvent", &GlobalEventGroup::GetEvent)
166 .def("SetEvent", &GlobalEventGroup::SetEvent)
167 .def("GetNumberEvents", &GlobalEventGroup::GetNumberEvents)
168 .def("GetGroupName", &GlobalEventGroup::GetGroupName)
169 ];
170
171 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
172 [
173 class_<GlobalAttackPoint>("GlobalAttackPoint")
174 .def("GetName", &GlobalAttackPoint::GetName)
175 .def("GetXPosition", &GlobalAttackPoint::GetXPosition)
176 .def("GetYPosition", &GlobalAttackPoint::GetYPosition)
177 .def("GetFortitudeModifier", &GlobalAttackPoint::GetFortitudeModifier)
178 .def("GetProtectionModifier", &GlobalAttackPoint::GetProtectionModifier)
179 .def("GetEvadeModifier", &GlobalAttackPoint::GetEvadeModifier)
180 .def("GetActorOwner", &GlobalAttackPoint::GetActorOwner)
181 .def("GetTotalPhysicalDefense", &GlobalAttackPoint::GetTotalPhysicalDefense)
182 .def("GetTotalMetaphysicalDefense", &GlobalAttackPoint::GetTotalMetaphysicalDefense)
183 .def("GetTotalEvadeRating", &GlobalAttackPoint::GetTotalEvadeRating)
184 ];
185
186 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
187 [
188 class_<GlobalActor>("GlobalActor")
189 .def("GetID", &GlobalActor::GetID)
190 .def("GetName", &GlobalActor::GetName)
191 .def("GetFilename", &GlobalActor::GetFilename)
192
193 .def("GetHitPoints", &GlobalActor::GetHitPoints)
194 .def("GetMaxHitPoints", &GlobalActor::GetMaxHitPoints)
195 .def("GetSkillPoints", &GlobalActor::GetSkillPoints)
196 .def("GetMaxSkillPoints", &GlobalActor::GetMaxSkillPoints)
197 .def("GetExperienceLevel", &GlobalActor::GetExperienceLevel)
198 .def("GetStrength", &GlobalActor::GetStrength)
199 .def("GetVigor", &GlobalActor::GetVigor)
200 .def("GetFortitude", &GlobalActor::GetFortitude)
201 .def("GetProtection", &GlobalActor::GetProtection)
202 .def("GetAgility", &GlobalActor::GetAgility)
203 .def("GetEvade", &GlobalActor::GetEvade)
204
205 .def("GetTotalPhysicalAttack", &GlobalActor::GetTotalPhysicalAttack)
206 .def("GetTotalMetaphysicalAttack", &GlobalActor::GetTotalMetaphysicalAttack)
207 .def("GetAttackPoint", &GlobalActor::GetAttackPoint)
208 // .def("GetWeaponEquipped", &GlobalActor::GetWeaponEquipped)
209 // .def("GetArmorEquipped", (GlobalArmor* (GlobalActor::*)(uint32)) &GlobalActor::GetArmorEquipped)
210 // .def("GetAttackPoints", &GlobalActor::GetAttackPoints)
211 // .def("GetElementalAttackBonuses", &GlobalActor::GetElementalAttackBonuses)
212 // .def("GetStatusAttackBonuses", &GlobalActor::GetStatusAttackBonuses)
213 // .def("GetElementalDefenseBonuses", &GlobalActor::GetElementalDefenseBonuses)
214 // .def("GetStatusDefenseBonuses", &GlobalActor::GetStatusDefenseBonuses)
215
216 .def("SetHitPoints", &GlobalActor::SetHitPoints)
217 .def("SetSkillPoints", &GlobalActor::SetSkillPoints)
218 .def("SetMaxHitPoints", &GlobalActor::SetMaxHitPoints)
219 .def("SetMaxSkillPoints", &GlobalActor::SetMaxSkillPoints)
220 .def("SetExperienceLevel", &GlobalActor::SetExperienceLevel)
221 .def("SetStrength", &GlobalActor::SetStrength)
222 .def("SetVigor", &GlobalActor::SetVigor)
223 .def("SetFortitude", &GlobalActor::SetFortitude)
224 .def("SetProtection", &GlobalActor::SetProtection)
225 .def("SetAgility", &GlobalActor::SetAgility)
226 .def("SetEvade", &GlobalActor::SetEvade)
227
228 .def("AddHitPoints", &GlobalActor::AddHitPoints)
229 .def("SubtractHitPoints", &GlobalActor::SubtractHitPoints)
230 .def("AddMaxHitPoints", &GlobalActor::AddMaxHitPoints)
231 .def("SubtractMaxHitPoints", &GlobalActor::SubtractMaxHitPoints)
232 .def("AddSkillPoints", &GlobalActor::AddSkillPoints)
233 .def("SubtractSkillPoints", &GlobalActor::SubtractSkillPoints)
234 .def("AddMaxSkillPoints", &GlobalActor::AddMaxSkillPoints)
235 .def("SubtractMaxSkillPoints", &GlobalActor::SubtractMaxSkillPoints)
236 .def("AddStrength", &GlobalActor::AddStrength)
237 .def("SubtractStrength", &GlobalActor::SubtractStrength)
238 .def("AddVigor", &GlobalActor::AddVigor)
239 .def("SubtractVigor", &GlobalActor::SubtractVigor)
240 .def("AddFortitude", &GlobalActor::AddFortitude)
241 .def("SubtractFortitude", &GlobalActor::SubtractFortitude)
242 .def("AddProtection", &GlobalActor::AddProtection)
243 .def("SubtractProtection", &GlobalActor::SubtractProtection)
244 .def("AddAgility", &GlobalActor::AddAgility)
245 .def("SubtractAgility", &GlobalActor::SubtractAgility)
246 .def("AddEvade", &GlobalActor::AddEvade)
247 .def("SubtractEvade", &GlobalActor::SubtractEvade)
248
249 .def("IsAlive", &GlobalActor::IsAlive)
250 // .def("EquipWeapon", &GlobalActor::EquipWeapon)
251 // .def("EquipArmor", &GlobalActor::EquipArmor)
252 ];
253
254 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
255 [
256 class_<GlobalCharacterGrowth>("GlobalCharacterGrowth")
257 .def_readwrite("_hit_points_growth", &GlobalCharacterGrowth::_hit_points_growth)
258 .def_readwrite("_skill_points_growth", &GlobalCharacterGrowth::_skill_points_growth)
259 .def_readwrite("_strength_growth", &GlobalCharacterGrowth::_strength_growth)
260 .def_readwrite("_vigor_growth", &GlobalCharacterGrowth::_vigor_growth)
261 .def_readwrite("_fortitude_growth", &GlobalCharacterGrowth::_fortitude_growth)
262 .def_readwrite("_protection_growth", &GlobalCharacterGrowth::_protection_growth)
263 .def_readwrite("_agility_growth", &GlobalCharacterGrowth::_agility_growth)
264 .def_readwrite("_evade_growth", &GlobalCharacterGrowth::_evade_growth)
265 .def("_AddSkill", &GlobalCharacterGrowth::_AddSkill)
266 ];
267
268 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
269 [
270 class_<GlobalCharacter, GlobalActor>("GlobalCharacter")
271 .def("GetGrowth", &GlobalCharacter::GetGrowth)
272 .def("AddSkill", &GlobalCharacter::AddSkill)
273 ];
274
275 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
276 [
277 class_<GlobalParty>("GlobalParty")
278 .def("AddHitPoints", &GlobalParty::AddHitPoints)
279 ];
280
281 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
282 [
283 class_<GlobalEnemy, GlobalActor>("GlobalEnemy")
284 ];
285
286 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
287 [
288 class_<GlobalObject>("GlobalObject")
289 .def("GetID", &GlobalObject::GetID)
290 .def("GetName", &GlobalObject::GetName)
291 .def("GetType", &GlobalObject::GetObjectType)
292 .def("GetCount", &GlobalObject::GetCount)
293 .def("IncrementCount", &GlobalObject::IncrementCount)
294 .def("DecrementCount", &GlobalObject::DecrementCount)
295 ];
296
297 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
298 [
299 class_<GlobalItem, GlobalObject>("GlobalItem")
300 // .def(constructor<>(uint32, uint32))
301 ];
302
303 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
304 [
305 class_<GlobalWeapon, GlobalObject>("GlobalWeapon")
306 .def("GetUsableBy", &GlobalWeapon::GetUsableBy)
307 // .def(constructor<>(uint32, uint32))
308 ];
309
310 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
311 [
312 class_<GlobalArmor, GlobalObject>("GlobalArmor")
313 .def("GetUsableBy", &GlobalArmor::GetUsableBy)
314 // .def(constructor<>(uint32, uint32))
315 ];
316
317 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
318 [
319 class_<GlobalStatusEffect>("GlobalStatusEffect")
320 .def("GetType", &GlobalStatusEffect::GetType)
321 .def("GetIntensity", &GlobalStatusEffect::GetIntensity)
322 ];
323
324 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
325 [
326 class_<GlobalElementalEffect>("GlobalElementalEffect")
327 ];
328
329 module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
330 [
331 class_<GlobalSkill>("GlobalSkill")
332 ];
333
334 } // End using global namespaces
335
336 // Bind GlobalManager to Lua
337 luabind::object global_table = luabind::globals(hoa_script::ScriptManager->GetGlobalState());
338 global_table["GlobalManager"] = hoa_global::GlobalManager;
339 } // BindGlobalsToLua
340
341 } // namespace hoa_defs
342