Advertisement
Guest User

Untitled

a guest
May 26th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 58.30 KB | None | 0 0
  1. /* SUBRACE Library by Gigaschatten */
  2.  
  3. #include "gs_inc_common"
  4. #include "gs_inc_iprop"
  5. #include "gs_inc_text"
  6. #include "mi_log"
  7. #include "nwnx_funcs"
  8.  
  9. const string SUBRACE = "SUBRACE"; // for logging
  10.  
  11. //void main() {}
  12.  
  13. const string GS_SU_TEMPLATE_PROPERTY = "gs_item317";
  14. const string GS_SU_TEMPLATE_ABILITY = "gs_item318";
  15.  
  16. const int GS_SU_NONE = 0;
  17. const int GS_SU_DWARF_GOLD = 1;
  18. const int GS_SU_DWARF_GRAY = 2;
  19. const int GS_SU_DWARF_SHIELD = 3;
  20. const int GS_SU_ELF_DROW = 4;
  21. const int GS_SU_ELF_MOON = 5;
  22. const int GS_SU_ELF_SUN = 6;
  23. const int GS_SU_ELF_WILD = 7;
  24. const int GS_SU_ELF_WOOD = 8;
  25. const int GS_SU_GNOME_DEEP = 9;
  26. const int GS_SU_GNOME_ROCK = 10;
  27. const int GS_SU_HALFLING_GHOSTWISE = 11;
  28. const int GS_SU_HALFLING_LIGHTFOOT = 12;
  29. const int GS_SU_HALFLING_STRONGHEART = 13;
  30. const int GS_SU_PLANETOUCHED_AASIMAR = 14;
  31. const int GS_SU_PLANETOUCHED_GENASI_AIR = 15;
  32. const int GS_SU_PLANETOUCHED_GENASI_EARTH = 16;
  33. const int GS_SU_PLANETOUCHED_GENASI_FIRE = 17;
  34. const int GS_SU_PLANETOUCHED_GENASI_WATER = 18;
  35. const int GS_SU_PLANETOUCHED_TIEFLING = 19;
  36. const int GS_SU_HALFORC_OROG = 20; //Deprecated
  37. const int GS_SU_HALFORC_GNOLL = 21;
  38.  
  39. const int GS_SU_SPECIAL_FEY = 100;
  40. const int GS_SU_SPECIAL_GOBLIN = 101;
  41. const int GS_SU_SPECIAL_KOBOLD = 102;
  42. const int GS_SU_SPECIAL_BAATEZU = 103;
  43. const int GS_SU_SPECIAL_RAKSHASA = 104;
  44. const int GS_SU_SPECIAL_DRAGON = 105;
  45. //Additions by JediMindTrix
  46. const int GS_SU_NEW_OROG = 106;
  47.  
  48.  
  49. //Race represented as bits
  50. const int MD_BIT_DWARF = 0x01;
  51. const int MD_BIT_ELF = 0x02;
  52. const int MD_BIT_HORC = 0x04;
  53. const int MD_BIT_HUMAN = 0x08;
  54. const int MD_BIT_HELF = 0x10;
  55. const int MD_BIT_HLING = 0x20;
  56. const int MD_BIT_GNOME = 0x40;
  57. //Now monster subraces
  58. const int MD_BIT_DUERGAR = 0x80;
  59. const int MD_BIT_DROW = 0x100;
  60. const int MD_BIT_DEEP_GNOME = 0x200;
  61. const int MD_BIT_OROG = 0x400;
  62. const int MD_BIT_GNOLL = 0x800;
  63. const int MD_BIT_FEY = 0x1000;
  64. const int MD_BIT_GOBLIN = 0x2000;
  65. const int MD_BIT_KOBOLD = 0x4000;
  66.  
  67. //apply properties for nSubrace of nLevel to oItem
  68. void gsSUApplyProperty(object oItem, int nSubRace, int nLevel);
  69. //apply abilities for nSubrace of nLevel to oItem
  70. void gsSUApplyAbility(object oItem, int nSubRace, int nLevel);
  71. //return subrace constant resembling sSubRace
  72. int gsSUGetSubRaceByName(string sSubRace);
  73. //return name of nSubRace
  74. string gsSUGetNameBySubRace(int nSubRace);
  75. //return effective character level for nSubRace of nLevel
  76. int gsSUGetECL(int nSubRace, int nLevel);
  77. //return favored class of nSubRace and nGender
  78. int gsSUGetFavoredClass(int nSubRace, int nGender = GENDER_MALE);
  79. //return description of nSubRace (text description of race and abilities)
  80. string gsSUGetDescriptionBySubRace(int nSubRace);
  81. // return TRUE if this is an UD-based subrace
  82. int gsSUGetIsUnderdarker(int nSubRace);
  83. // return TRUE if this is an UD-bases subrace that is usually hostile to
  84. // surfacers (i.e. excludes gnolls and svirfs).
  85. int gsSUGetIsHostileUnderdarker(int nSubRace);
  86. // return TRUE if this is a neutral subrace (gnolls and svirfs)
  87. int gsSUGetIsNeutralRace(int nSubRace);
  88. // return the name of nRacialType
  89. string gsSUGetRaceName(int nRacialType);
  90. //Returns the bit given racial Number
  91. int md_ConvertRaceToBit(int nRace);
  92. //Returns the bit given subrace.
  93. int md_ConvertSubraceToBit(int nSubrace);
  94.  
  95.  
  96. void gsSUApplyProperty(object oItem, int nSubRace, int nLevel)
  97. {
  98. object oPossessor = GetItemPossessor(oItem);
  99. int nRacialType = GetIsObjectValid(oPossessor) ?
  100. GetRacialType(oPossessor) : -1;
  101.  
  102. // First level - add permanent character changes.
  103. int nAppliedAbilities = GetLocalInt(oItem, "APPLIED_ABILITIES");
  104.  
  105. if (GetHitDice(oPossessor) == 1 && !nAppliedAbilities)
  106. {
  107. SetLocalInt(oItem, "APPLIED_ABILITIES", TRUE);
  108.  
  109. Trace(SUBRACE, GetName(oPossessor) + " has not yet had stat changes applied.");
  110.  
  111. switch (nSubRace)
  112. {
  113. case GS_SU_DWARF_GOLD:
  114. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, 2);
  115. ModifyAbilityScore(oPossessor, ABILITY_DEXTERITY, -2);
  116. break;
  117.  
  118. case GS_SU_DWARF_GRAY:
  119. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, -2);
  120. break;
  121.  
  122. case GS_SU_ELF_DROW:
  123. ModifyAbilityScore(oPossessor, ABILITY_INTELLIGENCE, 2);
  124. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, 2);
  125. break;
  126.  
  127. case GS_SU_ELF_SUN:
  128. ModifyAbilityScore(oPossessor, ABILITY_DEXTERITY, -2);
  129. ModifyAbilityScore(oPossessor, ABILITY_INTELLIGENCE, 2);
  130. break;
  131.  
  132. case GS_SU_ELF_WILD:
  133. ModifyAbilityScore(oPossessor, ABILITY_CONSTITUTION, 2);
  134. ModifyAbilityScore(oPossessor, ABILITY_INTELLIGENCE, -2);
  135. break;
  136.  
  137. case GS_SU_ELF_WOOD:
  138. ModifyAbilityScore(oPossessor, ABILITY_STRENGTH, 2);
  139. ModifyAbilityScore(oPossessor, ABILITY_INTELLIGENCE, -2);
  140. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, -2);
  141. break;
  142.  
  143. case GS_SU_GNOME_DEEP:
  144. ModifyAbilityScore(oPossessor, ABILITY_CONSTITUTION, -2);
  145. ModifyAbilityScore(oPossessor, ABILITY_DEXTERITY, 2);
  146. ModifyAbilityScore(oPossessor, ABILITY_WISDOM, 2);
  147. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, -4);
  148. break;
  149.  
  150. case GS_SU_PLANETOUCHED_AASIMAR:
  151. ModifyAbilityScore(oPossessor, ABILITY_WISDOM, 2);
  152. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, 2);
  153. break;
  154.  
  155. case GS_SU_PLANETOUCHED_GENASI_AIR:
  156. ModifyAbilityScore(oPossessor, ABILITY_DEXTERITY, 2);
  157. ModifyAbilityScore(oPossessor, ABILITY_INTELLIGENCE, 2);
  158. ModifyAbilityScore(oPossessor, ABILITY_WISDOM, -2);
  159. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, -2);
  160. break;
  161.  
  162. case GS_SU_PLANETOUCHED_GENASI_EARTH:
  163. ModifyAbilityScore(oPossessor, ABILITY_STRENGTH, 2);
  164. ModifyAbilityScore(oPossessor, ABILITY_CONSTITUTION, 2);
  165. ModifyAbilityScore(oPossessor, ABILITY_WISDOM, -2);
  166. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, -2);
  167. break;
  168.  
  169. case GS_SU_PLANETOUCHED_GENASI_FIRE:
  170. ModifyAbilityScore(oPossessor, ABILITY_INTELLIGENCE, 2);
  171. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, -2);
  172. break;
  173.  
  174. case GS_SU_PLANETOUCHED_GENASI_WATER:
  175. ModifyAbilityScore(oPossessor, ABILITY_CONSTITUTION, 2);
  176. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, -2);
  177. break;
  178.  
  179. case GS_SU_PLANETOUCHED_TIEFLING:
  180. ModifyAbilityScore(oPossessor, ABILITY_DEXTERITY, 2);
  181. ModifyAbilityScore(oPossessor, ABILITY_INTELLIGENCE, 2);
  182. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, -2);
  183. break;
  184.  
  185. case GS_SU_SPECIAL_FEY: //subrace of halfling, generic
  186. //STR -4
  187. ModifyAbilityScore(oPossessor, ABILITY_STRENGTH, -2);
  188. //DEX +4
  189. ModifyAbilityScore(oPossessor, ABILITY_DEXTERITY, 2);
  190. //CHA +4
  191. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, 4);
  192. break;
  193.  
  194. case GS_SU_SPECIAL_GOBLIN: //subrace of halfling
  195. //STR -2
  196. //DEX +2
  197. //CHA -2
  198. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, -2);
  199. break;
  200.  
  201. case GS_SU_SPECIAL_KOBOLD: //subrace of halfling
  202. //STR -4
  203. ModifyAbilityScore(oPossessor, ABILITY_STRENGTH, -2);
  204. //DEX +2
  205. break;
  206.  
  207. //Commented out by JediMindTrix
  208. //case GS_SU_HALFORC_OROG:
  209. // ModifyAbilityScore(oPossessor, ABILITY_CONSTITUTION, 2); //Total +4
  210. // ModifyAbilityScore(oPossessor, ABILITY_WISDOM, -2);
  211. // break;
  212.  
  213.  
  214. case GS_SU_HALFORC_GNOLL:
  215. ModifyAbilityScore(oPossessor, ABILITY_CONSTITUTION, 2);
  216. AddKnownFeat(oPossessor, FEAT_SKILL_AFFINITY_LISTEN);
  217. AddKnownFeat(oPossessor, FEAT_SKILL_AFFINITY_SPOT);
  218. break;
  219.  
  220. case GS_SU_SPECIAL_RAKSHASA:
  221. ModifyAbilityScore(oPossessor, ABILITY_DEXTERITY, 2);
  222. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, 2);
  223. AddKnownFeat(oPossessor, FEAT_SKILL_AFFINITY_LISTEN);
  224. AddKnownFeat(oPossessor, FEAT_SKILL_AFFINITY_SPOT);
  225. break;
  226.  
  227. case GS_SU_SPECIAL_DRAGON:
  228. ModifyAbilityScore(oPossessor, ABILITY_STRENGTH, 2);
  229. ModifyAbilityScore(oPossessor, ABILITY_CONSTITUTION, 2);
  230. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, 2);
  231. AddKnownFeat(oPossessor, FEAT_DRAGON_ARMOR);
  232. AddKnownFeat(oPossessor, FEAT_EPIC_ARMOR_SKIN);
  233. break;
  234.  
  235. case GS_SU_NEW_OROG:
  236. ModifyAbilityScore(oPossessor, ABILITY_STRENGTH, 2); //Total +4
  237. ModifyAbilityScore(oPossessor, ABILITY_WISDOM, -2);
  238. ModifyAbilityScore(oPossessor, ABILITY_DEXTERITY, -2);
  239. ModifyAbilityScore(oPossessor, ABILITY_CHARISMA, 4); //Total +2
  240. ModifyAbilityScore(oPossessor, ABILITY_INTELLIGENCE, 2); //Total +2
  241. effect eEffect1 = EffectDamageImmunityDecrease(DAMAGE_TYPE_FIRE, 20); //Elemental Resistance application
  242. effect eEffect2 = EffectDamageImmunityDecrease(DAMAGE_TYPE_COLD, 20);
  243. effect eOrogLink = EffectLinkEffects(eEffect1, eEffect2); //Link them together
  244. ApplyEffectToObject(DURATION_TYPE_PERMANENT, eOrogLink, oPossessor);
  245. SetACNaturalBase(oPossessor, GetACNaturalBase(oPossessor) + 1);
  246. break;
  247. }
  248. }
  249.  
  250. gsIPRemoveAllProperties(oItem);
  251.  
  252. switch (nSubRace)
  253. {
  254. case GS_SU_NONE:
  255. break;
  256.  
  257. case GS_SU_DWARF_GOLD:
  258. AddItemProperty(DURATION_TYPE_PERMANENT,
  259. ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_ABERRATION, 1),
  260. oItem);
  261. break;
  262.  
  263. case GS_SU_DWARF_GRAY:
  264. AddItemProperty(DURATION_TYPE_PERMANENT,
  265. ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_PARALYSIS),
  266. oItem);
  267. AddItemProperty(DURATION_TYPE_PERMANENT,
  268. ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_POISON),
  269. oItem);
  270. AddItemProperty(DURATION_TYPE_PERMANENT,
  271. ItemPropertySkillBonus(SKILL_LISTEN, 1),
  272. oItem);
  273. AddItemProperty(DURATION_TYPE_PERMANENT,
  274. ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, 4),
  275. oItem);
  276. AddItemProperty(DURATION_TYPE_PERMANENT,
  277. ItemPropertySkillBonus(SKILL_SPOT, 1),
  278. oItem);
  279. break;
  280.  
  281. case GS_SU_DWARF_SHIELD: //default
  282. break;
  283.  
  284. case GS_SU_SPECIAL_DRAGON:
  285. AddItemProperty(DURATION_TYPE_PERMANENT,
  286. ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,
  287. IP_CONST_DAMAGERESIST_20),
  288. oItem);
  289. AddItemProperty(DURATION_TYPE_PERMANENT,
  290. ItemPropertyTrueSeeing(),
  291. oItem);
  292.  
  293. if (!GetLocalInt(oItem, "MI_TOTEM"))
  294. {
  295. SetLocalInt(oItem, "MI_TOTEM", 112); // Silver dragon.
  296. }
  297.  
  298. // No break - spill down and inherit Drow SR and Darkvision
  299.  
  300. case GS_SU_ELF_DROW:
  301. AddItemProperty(DURATION_TYPE_PERMANENT,
  302. ItemPropertyDarkvision(),
  303. oItem);
  304.  
  305. switch (nLevel)
  306. {
  307. case 1:
  308. case 2:
  309. AddItemProperty(DURATION_TYPE_PERMANENT,
  310. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_12),
  311. oItem);
  312. break;
  313.  
  314. case 3:
  315. case 4:
  316. AddItemProperty(DURATION_TYPE_PERMANENT,
  317. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14),
  318. oItem);
  319. break;
  320.  
  321. case 5:
  322. case 6:
  323. AddItemProperty(DURATION_TYPE_PERMANENT,
  324. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16),
  325. oItem);
  326. break;
  327.  
  328. case 7:
  329. case 8:
  330. AddItemProperty(DURATION_TYPE_PERMANENT,
  331. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_18),
  332. oItem);
  333. break;
  334.  
  335. case 9:
  336. case 10:
  337. AddItemProperty(DURATION_TYPE_PERMANENT,
  338. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_20),
  339. oItem);
  340. break;
  341.  
  342. case 11:
  343. case 12:
  344. AddItemProperty(DURATION_TYPE_PERMANENT,
  345. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_22),
  346. oItem);
  347. break;
  348.  
  349. case 13:
  350. case 14:
  351. AddItemProperty(DURATION_TYPE_PERMANENT,
  352. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_24),
  353. oItem);
  354. break;
  355.  
  356. case 15:
  357. case 16:
  358. AddItemProperty(DURATION_TYPE_PERMANENT,
  359. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_26),
  360. oItem);
  361. break;
  362.  
  363. case 17:
  364. case 18:
  365. AddItemProperty(DURATION_TYPE_PERMANENT,
  366. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_28),
  367. oItem);
  368. break;
  369.  
  370. case 19:
  371. case 20:
  372. AddItemProperty(DURATION_TYPE_PERMANENT,
  373. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_30),
  374. oItem);
  375. break;
  376.  
  377. default:
  378. AddItemProperty(DURATION_TYPE_PERMANENT,
  379. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_32),
  380. oItem);
  381. break;
  382. }
  383.  
  384. break;
  385.  
  386. case GS_SU_ELF_MOON: //default
  387. break;
  388.  
  389. case GS_SU_ELF_SUN:
  390. break;
  391.  
  392. case GS_SU_ELF_WILD:
  393. break;
  394.  
  395. case GS_SU_ELF_WOOD:
  396. break;
  397.  
  398. case GS_SU_GNOME_DEEP:
  399. AddItemProperty(DURATION_TYPE_PERMANENT,
  400. ItemPropertyDarkvision(),
  401. oItem);
  402.  
  403. switch (nLevel)
  404. {
  405. case 1:
  406. case 2:
  407. AddItemProperty(DURATION_TYPE_PERMANENT,
  408. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_12),
  409. oItem);
  410. break;
  411.  
  412. case 3:
  413. case 4:
  414. AddItemProperty(DURATION_TYPE_PERMANENT,
  415. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14),
  416. oItem);
  417. break;
  418.  
  419. case 5:
  420. case 6:
  421. AddItemProperty(DURATION_TYPE_PERMANENT,
  422. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16),
  423. oItem);
  424. break;
  425.  
  426. case 7:
  427. case 8:
  428. AddItemProperty(DURATION_TYPE_PERMANENT,
  429. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_18),
  430. oItem);
  431. break;
  432.  
  433. case 9:
  434. case 10:
  435. AddItemProperty(DURATION_TYPE_PERMANENT,
  436. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_20),
  437. oItem);
  438. break;
  439.  
  440. case 11:
  441. case 12:
  442. AddItemProperty(DURATION_TYPE_PERMANENT,
  443. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_22),
  444. oItem);
  445. break;
  446.  
  447. case 13:
  448. case 14:
  449. AddItemProperty(DURATION_TYPE_PERMANENT,
  450. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_24),
  451. oItem);
  452. break;
  453.  
  454. case 15:
  455. case 16:
  456. AddItemProperty(DURATION_TYPE_PERMANENT,
  457. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_26),
  458. oItem);
  459. break;
  460.  
  461. case 17:
  462. case 18:
  463. AddItemProperty(DURATION_TYPE_PERMANENT,
  464. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_28),
  465. oItem);
  466. break;
  467.  
  468. case 19:
  469. case 20:
  470. AddItemProperty(DURATION_TYPE_PERMANENT,
  471. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_30),
  472. oItem);
  473. break;
  474.  
  475. default:
  476. AddItemProperty(DURATION_TYPE_PERMANENT,
  477. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_32),
  478. oItem);
  479. break;
  480. }
  481.  
  482. AddItemProperty(DURATION_TYPE_PERMANENT,
  483. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_ABERRATION, 4),
  484. oItem);
  485. AddItemProperty(DURATION_TYPE_PERMANENT,
  486. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_ANIMAL, 4),
  487. oItem);
  488. AddItemProperty(DURATION_TYPE_PERMANENT,
  489. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_BEAST, 4),
  490. oItem);
  491. AddItemProperty(DURATION_TYPE_PERMANENT,
  492. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_CONSTRUCT, 4),
  493. oItem);
  494. AddItemProperty(DURATION_TYPE_PERMANENT,
  495. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_DRAGON, 4),
  496. oItem);
  497. AddItemProperty(DURATION_TYPE_PERMANENT,
  498. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_DWARF, 4),
  499. oItem);
  500. AddItemProperty(DURATION_TYPE_PERMANENT,
  501. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_ELEMENTAL, 4),
  502. oItem);
  503. AddItemProperty(DURATION_TYPE_PERMANENT,
  504. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_ELF, 4),
  505. oItem);
  506. AddItemProperty(DURATION_TYPE_PERMANENT,
  507. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_FEY, 4),
  508. oItem);
  509. AddItemProperty(DURATION_TYPE_PERMANENT,
  510. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_GNOME, 4),
  511. oItem);
  512. AddItemProperty(DURATION_TYPE_PERMANENT,
  513. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_HALFELF, 4),
  514. oItem);
  515. AddItemProperty(DURATION_TYPE_PERMANENT,
  516. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_HALFLING, 4),
  517. oItem);
  518. AddItemProperty(DURATION_TYPE_PERMANENT,
  519. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_HALFORC, 4),
  520. oItem);
  521. AddItemProperty(DURATION_TYPE_PERMANENT,
  522. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_HUMAN, 4),
  523. oItem);
  524. AddItemProperty(DURATION_TYPE_PERMANENT,
  525. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_HUMANOID_GOBLINOID, 4),
  526. oItem);
  527. AddItemProperty(DURATION_TYPE_PERMANENT,
  528. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_HUMANOID_MONSTROUS, 4),
  529. oItem);
  530. AddItemProperty(DURATION_TYPE_PERMANENT,
  531. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_HUMANOID_ORC, 4),
  532. oItem);
  533. AddItemProperty(DURATION_TYPE_PERMANENT,
  534. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_HUMANOID_REPTILIAN, 4),
  535. oItem);
  536. AddItemProperty(DURATION_TYPE_PERMANENT,
  537. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_MAGICAL_BEAST, 4),
  538. oItem);
  539. AddItemProperty(DURATION_TYPE_PERMANENT,
  540. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER, 4),
  541. oItem);
  542. AddItemProperty(DURATION_TYPE_PERMANENT,
  543. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_SHAPECHANGER, 4),
  544. oItem);
  545. AddItemProperty(DURATION_TYPE_PERMANENT,
  546. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD, 4),
  547. oItem);
  548. AddItemProperty(DURATION_TYPE_PERMANENT,
  549. ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_VERMIN, 4),
  550. oItem);
  551. AddItemProperty(DURATION_TYPE_PERMANENT,
  552. ItemPropertyBonusSavingThrowVsX(IP_CONST_SAVEVS_UNIVERSAL, 2),
  553. oItem);
  554. AddItemProperty(DURATION_TYPE_PERMANENT,
  555. ItemPropertySkillBonus(SKILL_HIDE, 2),
  556. oItem);
  557. break;
  558.  
  559. case GS_SU_GNOME_ROCK: //default
  560. break;
  561.  
  562. case GS_SU_HALFLING_GHOSTWISE:
  563. AddItemProperty(DURATION_TYPE_PERMANENT,
  564. ItemPropertyReducedSavingThrowVsX(IP_CONST_SAVEVS_UNIVERSAL, 1),
  565. oItem);
  566. break;
  567.  
  568. case GS_SU_HALFLING_LIGHTFOOT: //default
  569. break;
  570.  
  571. case GS_SU_HALFLING_STRONGHEART:
  572. //predefined bonus talent
  573. AddItemProperty(DURATION_TYPE_PERMANENT,
  574. ItemPropertyBonusFeat(IP_CONST_FEAT_ALERTNESS),
  575. oItem);
  576. AddItemProperty(DURATION_TYPE_PERMANENT,
  577. ItemPropertyReducedSavingThrowVsX(IP_CONST_SAVEVS_UNIVERSAL, 1),
  578. oItem);
  579. break;
  580.  
  581. case GS_SU_PLANETOUCHED_AASIMAR:
  582. AddItemProperty(DURATION_TYPE_PERMANENT,
  583. ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,
  584. IP_CONST_DAMAGERESIST_5),
  585. oItem);
  586. AddItemProperty(DURATION_TYPE_PERMANENT,
  587. ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,
  588. IP_CONST_DAMAGERESIST_5),
  589. oItem);
  590. AddItemProperty(DURATION_TYPE_PERMANENT,
  591. ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,
  592. IP_CONST_DAMAGERESIST_5),
  593. oItem);
  594. AddItemProperty(DURATION_TYPE_PERMANENT,
  595. ItemPropertySkillBonus(SKILL_LISTEN, 2),
  596. oItem);
  597. AddItemProperty(DURATION_TYPE_PERMANENT,
  598. ItemPropertySkillBonus(SKILL_SPOT, 2),
  599. oItem);
  600. AddItemProperty(DURATION_TYPE_PERMANENT,
  601. ItemPropertyDarkvision(),
  602. oItem);
  603. break;
  604.  
  605. case GS_SU_PLANETOUCHED_GENASI_AIR:
  606. AddItemProperty(DURATION_TYPE_PERMANENT,
  607. ItemPropertyDarkvision(),
  608. oItem);
  609. break;
  610.  
  611. case GS_SU_PLANETOUCHED_GENASI_EARTH:
  612. AddItemProperty(DURATION_TYPE_PERMANENT,
  613. ItemPropertyDarkvision(),
  614. oItem);
  615. break;
  616.  
  617. case GS_SU_PLANETOUCHED_GENASI_FIRE:
  618. AddItemProperty(DURATION_TYPE_PERMANENT,
  619. ItemPropertyDarkvision(),
  620. oItem);
  621. break;
  622.  
  623. case GS_SU_PLANETOUCHED_GENASI_WATER:
  624. AddItemProperty(DURATION_TYPE_PERMANENT,
  625. ItemPropertyDarkvision(),
  626. oItem);
  627. break;
  628.  
  629. case GS_SU_PLANETOUCHED_TIEFLING:
  630. AddItemProperty(DURATION_TYPE_PERMANENT,
  631. ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,
  632. IP_CONST_DAMAGERESIST_5),
  633. oItem);
  634. AddItemProperty(DURATION_TYPE_PERMANENT,
  635. ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,
  636. IP_CONST_DAMAGERESIST_5),
  637. oItem);
  638. AddItemProperty(DURATION_TYPE_PERMANENT,
  639. ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,
  640. IP_CONST_DAMAGERESIST_5),
  641. oItem);
  642. AddItemProperty(DURATION_TYPE_PERMANENT,
  643. ItemPropertySkillBonus(SKILL_BLUFF, 2),
  644. oItem);
  645. AddItemProperty(DURATION_TYPE_PERMANENT,
  646. ItemPropertySkillBonus(SKILL_HIDE, 2),
  647. oItem);
  648. AddItemProperty(DURATION_TYPE_PERMANENT,
  649. ItemPropertyDarkvision(),
  650. oItem);
  651. break;
  652.  
  653. case GS_SU_SPECIAL_FEY: //subrace of halfling, generic
  654. //Hide +4
  655. AddItemProperty(DURATION_TYPE_PERMANENT,
  656. ItemPropertySkillBonus(SKILL_HIDE, 4),
  657. oItem);
  658. //Move Silently +4
  659. AddItemProperty(DURATION_TYPE_PERMANENT,
  660. ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, 2),
  661. oItem);
  662. //SR 16
  663. AddItemProperty(DURATION_TYPE_PERMANENT,
  664. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16),
  665. oItem);
  666. //neutralize racial traits
  667. AddItemProperty(DURATION_TYPE_PERMANENT,
  668. ItemPropertyReducedSavingThrowVsX(IP_CONST_SAVEVS_UNIVERSAL, 1),
  669. oItem);
  670. AddItemProperty(DURATION_TYPE_PERMANENT,
  671. ItemPropertyReducedSavingThrowVsX(IP_CONST_SAVEVS_FEAR, 1),
  672. oItem);
  673. AddItemProperty(DURATION_TYPE_PERMANENT,
  674. ItemPropertyDecreaseSkill(SKILL_LISTEN, 2),
  675. oItem);
  676. break;
  677.  
  678. case GS_SU_SPECIAL_GOBLIN: //subrace of halfling
  679. //Move Silently +4
  680. AddItemProperty(DURATION_TYPE_PERMANENT,
  681. ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, 2),
  682. oItem);
  683. //Alertness (Listen +2, Spot +2)
  684. AddItemProperty(DURATION_TYPE_PERMANENT,
  685. ItemPropertySkillBonus(SKILL_SPOT, 2),
  686. oItem);
  687. //Darkvision
  688. AddItemProperty(DURATION_TYPE_PERMANENT,
  689. ItemPropertyDarkvision(),
  690. oItem);
  691. //neutralize racial traits
  692. AddItemProperty(DURATION_TYPE_PERMANENT,
  693. ItemPropertyReducedSavingThrowVsX(IP_CONST_SAVEVS_UNIVERSAL, 1),
  694. oItem);
  695. AddItemProperty(DURATION_TYPE_PERMANENT,
  696. ItemPropertyReducedSavingThrowVsX(IP_CONST_SAVEVS_FEAR, 1),
  697. oItem);
  698. break;
  699.  
  700. case GS_SU_SPECIAL_KOBOLD: //subrace of halfling
  701. //Craft Trap +2
  702. AddItemProperty(DURATION_TYPE_PERMANENT,
  703. ItemPropertySkillBonus(SKILL_CRAFT_TRAP, 2),
  704. oItem);
  705. //Alertness (Listen +2, Spot +2)
  706. AddItemProperty(DURATION_TYPE_PERMANENT,
  707. ItemPropertySkillBonus(SKILL_SPOT, 2),
  708. oItem);
  709. AddItemProperty(DURATION_TYPE_PERMANENT,
  710. ItemPropertySkillBonus(SKILL_LISTEN, 2),
  711. oItem);
  712. //Darkvision
  713. AddItemProperty(DURATION_TYPE_PERMANENT,
  714. ItemPropertyDarkvision(),
  715. oItem);
  716. //neutralize racial traits
  717. AddItemProperty(DURATION_TYPE_PERMANENT,
  718. ItemPropertyReducedSavingThrowVsX(IP_CONST_SAVEVS_UNIVERSAL, 1),
  719. oItem);
  720. AddItemProperty(DURATION_TYPE_PERMANENT,
  721. ItemPropertyReducedSavingThrowVsX(IP_CONST_SAVEVS_FEAR, 1),
  722. oItem);
  723. AddItemProperty(DURATION_TYPE_PERMANENT,
  724. ItemPropertyDecreaseSkill(SKILL_MOVE_SILENTLY, 2),
  725. oItem);
  726. break;
  727.  
  728. case GS_SU_SPECIAL_BAATEZU: //subrace of human
  729.  
  730. //common baatezu traits
  731. AddItemProperty(DURATION_TYPE_PERMANENT,
  732. ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,
  733. IP_CONST_DAMAGERESIST_10),
  734. oItem);
  735. AddItemProperty(DURATION_TYPE_PERMANENT,
  736. ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,
  737. IP_CONST_DAMAGERESIST_10),
  738. oItem);
  739. AddItemProperty(DURATION_TYPE_PERMANENT,
  740. ItemPropertyDarkvision(),
  741. oItem);
  742. AddItemProperty(DURATION_TYPE_PERMANENT,
  743. ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_FIRE,
  744. IP_CONST_DAMAGEIMMUNITY_100_PERCENT),
  745. oItem);
  746. AddItemProperty(DURATION_TYPE_PERMANENT,
  747. ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_POISON),
  748. oItem);
  749.  
  750. //soul shell
  751. if (nLevel <= 3)
  752. {
  753. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_WRAITH);
  754.  
  755. AddItemProperty(DURATION_TYPE_PERMANENT,
  756. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  757. IP_CONST_DAMAGESOAK_5_HP),
  758. oItem);
  759. AddItemProperty(DURATION_TYPE_PERMANENT,
  760. ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_MINDSPELLS),
  761. oItem);
  762.  
  763. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777538));
  764. }
  765.  
  766. //lemure
  767. else if (nLevel <= 6)
  768. {
  769. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_GOLEM_FLESH);
  770.  
  771. AddItemProperty(DURATION_TYPE_PERMANENT,
  772. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  773. IP_CONST_DAMAGESOAK_5_HP),
  774. oItem);
  775. AddItemProperty(DURATION_TYPE_PERMANENT,
  776. ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_MINDSPELLS),
  777. oItem);
  778.  
  779. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777539));
  780. }
  781.  
  782. //barbazu
  783. else if (nLevel <= 9)
  784. {
  785. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_ASABI_WARRIOR);
  786.  
  787. AddItemProperty(DURATION_TYPE_PERMANENT,
  788. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  789. IP_CONST_DAMAGESOAK_5_HP),
  790. oItem);
  791. AddItemProperty(DURATION_TYPE_PERMANENT,
  792. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16),
  793. oItem);
  794.  
  795. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777541));
  796. }
  797.  
  798. //erinyes
  799. else if (nLevel <= 12)
  800. {
  801. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_SUCCUBUS);
  802. SetCreatureWingType(CREATURE_WING_TYPE_ANGEL, oPossessor);
  803.  
  804. AddItemProperty(DURATION_TYPE_PERMANENT,
  805. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  806. IP_CONST_DAMAGESOAK_5_HP),
  807. oItem);
  808. AddItemProperty(DURATION_TYPE_PERMANENT,
  809. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_20),
  810. oItem);
  811. AddItemProperty(DURATION_TYPE_PERMANENT,
  812. ItemPropertyTrueSeeing(),
  813. oItem);
  814.  
  815. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777540));
  816. }
  817.  
  818. //osyluth
  819. else if (nLevel <= 15)
  820. {
  821. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_GHAST);
  822.  
  823. AddItemProperty(DURATION_TYPE_PERMANENT,
  824. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  825. IP_CONST_DAMAGESOAK_10_HP),
  826. oItem);
  827. AddItemProperty(DURATION_TYPE_PERMANENT,
  828. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_20),
  829. oItem);
  830.  
  831. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777542));
  832. }
  833.  
  834. //hamatula
  835. else if (nLevel <= 18)
  836. {
  837. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_SLAAD_GREEN);
  838.  
  839. AddItemProperty(DURATION_TYPE_PERMANENT,
  840. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  841. IP_CONST_DAMAGESOAK_10_HP),
  842. oItem);
  843. AddItemProperty(DURATION_TYPE_PERMANENT,
  844. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_22),
  845. oItem);
  846.  
  847. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777543));
  848. }
  849.  
  850. //gelugon
  851. else if (nLevel <= 21)
  852. {
  853. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_VROCK);
  854.  
  855. AddItemProperty(DURATION_TYPE_PERMANENT,
  856. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  857. IP_CONST_DAMAGESOAK_10_HP),
  858. oItem);
  859. AddItemProperty(DURATION_TYPE_PERMANENT,
  860. ItemPropertyRegeneration(5),
  861. oItem);
  862. AddItemProperty(DURATION_TYPE_PERMANENT,
  863. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_24),
  864. oItem);
  865.  
  866. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777545));
  867. }
  868.  
  869. //cornugon
  870. else if (nLevel <= 24)
  871. {
  872. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_ASABI_CHIEFTAIN);
  873.  
  874. AddItemProperty(DURATION_TYPE_PERMANENT,
  875. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  876. IP_CONST_DAMAGESOAK_10_HP),
  877. oItem);
  878. AddItemProperty(DURATION_TYPE_PERMANENT,
  879. ItemPropertyRegeneration(5),
  880. oItem);
  881. AddItemProperty(DURATION_TYPE_PERMANENT,
  882. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_28),
  883. oItem);
  884.  
  885. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777544));
  886. }
  887.  
  888. //pit fiend
  889. else if (nLevel <= 27)
  890. {
  891. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_DEVIL);
  892.  
  893. AddItemProperty(DURATION_TYPE_PERMANENT,
  894. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  895. IP_CONST_DAMAGESOAK_15_HP),
  896. oItem);
  897. AddItemProperty(DURATION_TYPE_PERMANENT,
  898. ItemPropertyRegeneration(5),
  899. oItem);
  900. AddItemProperty(DURATION_TYPE_PERMANENT,
  901. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_32),
  902. oItem);
  903.  
  904. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777546));
  905. }
  906.  
  907. //hell lord
  908. else
  909. {
  910. SetCreatureAppearanceType(oPossessor, APPEARANCE_TYPE_MEPHISTO_NORM);
  911.  
  912. AddItemProperty(DURATION_TYPE_PERMANENT,
  913. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,
  914. IP_CONST_DAMAGESOAK_15_HP),
  915. oItem);
  916. AddItemProperty(DURATION_TYPE_PERMANENT,
  917. ItemPropertyRegeneration(5),
  918. oItem);
  919. AddItemProperty(DURATION_TYPE_PERMANENT,
  920. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_32),
  921. oItem);
  922.  
  923. SendMessageToPC(oPossessor, gsCMReplaceString(GS_T_16777537, GS_T_16777547));
  924. }
  925. break;
  926. case GS_SU_HALFORC_OROG:
  927. break;
  928. case GS_SU_HALFORC_GNOLL:
  929. break;
  930.  
  931. case GS_SU_SPECIAL_RAKSHASA:
  932. AddItemProperty(DURATION_TYPE_PERMANENT,
  933. ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_2,
  934. IP_CONST_DAMAGESOAK_5_HP),
  935. oItem);
  936. AddItemProperty(DURATION_TYPE_PERMANENT,
  937. ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_32),
  938. oItem);
  939. AddItemProperty(DURATION_TYPE_PERMANENT,
  940. ItemPropertySkillBonus(SKILL_BLUFF, 8),
  941. oItem);
  942. break;
  943. //Addition by JediMindTrix
  944. case GS_SU_NEW_OROG:
  945. AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDarkvision(), oItem);
  946. break;
  947. //End Additions
  948. }
  949.  
  950. miDASetKeyedValue("gs_pc_data", gsPCGetPlayerID(oPossessor), "subrace_applied", "1");
  951. }
  952. //----------------------------------------------------------------
  953. void gsSUApplyAbility(object oItem, int nSubRace, int nLevel)
  954. {
  955. gsIPRemoveAllProperties(oItem);
  956.  
  957. switch (nSubRace)
  958. {
  959. case GS_SU_NONE:
  960. DestroyObject(oItem);
  961. break;
  962.  
  963. case GS_SU_DWARF_GOLD:
  964. break;
  965.  
  966. case GS_SU_DWARF_GRAY:
  967. AddItemProperty(DURATION_TYPE_PERMANENT,
  968. ItemPropertyCastSpell(IP_CONST_CASTSPELL_INVISIBILITY_3,
  969. IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  970. oItem);
  971. break;
  972.  
  973. case GS_SU_DWARF_SHIELD:
  974. break;
  975.  
  976. case GS_SU_ELF_DROW:
  977. AddItemProperty(DURATION_TYPE_PERMANENT,
  978. ItemPropertyCastSpell(IP_CONST_CASTSPELL_DARKNESS_3,
  979. IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  980. oItem);
  981. break;
  982.  
  983. case GS_SU_ELF_MOON:
  984. break;
  985.  
  986. case GS_SU_ELF_SUN:
  987. break;
  988.  
  989. case GS_SU_ELF_WILD:
  990. break;
  991.  
  992. case GS_SU_ELF_WOOD:
  993. break;
  994.  
  995. case GS_SU_GNOME_DEEP:
  996. AddItemProperty(DURATION_TYPE_PERMANENT,
  997. ItemPropertyCastSpell(IP_CONST_CASTSPELL_INVISIBILITY_3,
  998. IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  999. oItem);
  1000. break;
  1001.  
  1002. case GS_SU_GNOME_ROCK:
  1003. break;
  1004.  
  1005. case GS_SU_HALFLING_GHOSTWISE:
  1006. break;
  1007.  
  1008. case GS_SU_HALFLING_LIGHTFOOT:
  1009. break;
  1010.  
  1011. case GS_SU_HALFLING_STRONGHEART:
  1012. break;
  1013.  
  1014. case GS_SU_PLANETOUCHED_AASIMAR:
  1015. switch (nLevel)
  1016. {
  1017. case 1:
  1018. case 2:
  1019. case 3:
  1020. case 4:
  1021. AddItemProperty(DURATION_TYPE_PERMANENT,
  1022. ItemPropertyCastSpell(IP_CONST_CASTSPELL_LIGHT_1,
  1023. IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  1024. oItem);
  1025. break;
  1026.  
  1027. default:
  1028. AddItemProperty(DURATION_TYPE_PERMANENT,
  1029. ItemPropertyCastSpell(IP_CONST_CASTSPELL_LIGHT_5,
  1030. IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  1031. oItem);
  1032. break;
  1033. }
  1034. break;
  1035.  
  1036. case GS_SU_PLANETOUCHED_GENASI_AIR:
  1037. /*AddItemProperty(DURATION_TYPE_PERMANENT,
  1038. ItemPropertyCastSpell(418,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  1039. oItem);*/
  1040. break;
  1041.  
  1042. case GS_SU_PLANETOUCHED_GENASI_EARTH:
  1043. /*AddItemProperty(DURATION_TYPE_PERMANENT,
  1044. ItemPropertyCastSpell(420,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  1045. oItem);*/
  1046. break;
  1047.  
  1048. case GS_SU_PLANETOUCHED_GENASI_FIRE:
  1049. /*AddItemProperty(DURATION_TYPE_PERMANENT,
  1050. ItemPropertyCastSpell(421,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  1051. oItem);*/
  1052. break;
  1053.  
  1054. case GS_SU_PLANETOUCHED_GENASI_WATER:
  1055. AddItemProperty(DURATION_TYPE_PERMANENT,
  1056. ItemPropertyCastSpell(419,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  1057. oItem);
  1058. break;
  1059.  
  1060. case GS_SU_PLANETOUCHED_TIEFLING:
  1061. AddItemProperty(DURATION_TYPE_PERMANENT,
  1062. ItemPropertyCastSpell(IP_CONST_CASTSPELL_DARKNESS_3,
  1063. IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  1064. oItem);
  1065. break;
  1066.  
  1067. case GS_SU_SPECIAL_FEY:
  1068. AddItemProperty(DURATION_TYPE_PERMANENT,
  1069. ItemPropertyCastSpell(IP_CONST_CASTSPELL_CHARM_PERSON_2,
  1070. IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  1071. oItem);
  1072. AddItemProperty(DURATION_TYPE_PERMANENT,
  1073. ItemPropertyCastSpell(IP_CONST_CASTSPELL_INVISIBILITY_3,
  1074. IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),
  1075. oItem);
  1076. break;
  1077.  
  1078. case GS_SU_SPECIAL_GOBLIN:
  1079. break;
  1080.  
  1081. case GS_SU_SPECIAL_KOBOLD:
  1082. break;
  1083.  
  1084. case GS_SU_SPECIAL_BAATEZU:
  1085.  
  1086.  
  1087. //...
  1088. break;
  1089. case GS_SU_HALFORC_OROG:
  1090. break;
  1091. case GS_SU_HALFORC_GNOLL:
  1092. break;
  1093. case GS_SU_SPECIAL_RAKSHASA:
  1094. AddItemProperty(DURATION_TYPE_PERMANENT,
  1095. ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,
  1096. IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE),
  1097. oItem);
  1098. break;
  1099. case GS_SU_SPECIAL_DRAGON:
  1100. break;
  1101. }
  1102.  
  1103. AddItemProperty(DURATION_TYPE_PERMANENT,
  1104. ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_10_PERCENT),
  1105. oItem);
  1106. }
  1107. //----------------------------------------------------------------
  1108. int gsSUGetSubRaceByName(string sSubRace)
  1109. {
  1110. // Addition by Mithreas - subraces may have a background attached.
  1111. int nPara1 = FindSubString(sSubRace, "(");
  1112.  
  1113. if (nPara1 > -1)
  1114. {
  1115. // subrace = player's subrace (player's background)
  1116. sSubRace = GetStringLeft(sSubRace, nPara1 - 1);
  1117. }
  1118.  
  1119. if (sSubRace == GS_T_16777263) return GS_SU_DWARF_GOLD;
  1120. if (sSubRace == GS_T_16777264) return GS_SU_DWARF_GRAY;
  1121. if (sSubRace == GS_T_16777265) return GS_SU_DWARF_SHIELD;
  1122. if (sSubRace == GS_T_16777266) return GS_SU_ELF_DROW;
  1123. if (sSubRace == GS_T_16777267) return GS_SU_ELF_MOON;
  1124. if (sSubRace == GS_T_16777268) return GS_SU_ELF_SUN;
  1125. if (sSubRace == GS_T_16777269) return GS_SU_ELF_WILD;
  1126. if (sSubRace == GS_T_16777270) return GS_SU_ELF_WOOD;
  1127. if (sSubRace == GS_T_16777271) return GS_SU_GNOME_DEEP;
  1128. if (sSubRace == GS_T_16777272) return GS_SU_GNOME_ROCK;
  1129. if (sSubRace == GS_T_16777273) return GS_SU_HALFLING_GHOSTWISE;
  1130. if (sSubRace == GS_T_16777274) return GS_SU_HALFLING_LIGHTFOOT;
  1131. if (sSubRace == GS_T_16777275) return GS_SU_HALFLING_STRONGHEART;
  1132. if (sSubRace == GS_T_16777276) return GS_SU_PLANETOUCHED_AASIMAR;
  1133. if (sSubRace == GS_T_16777277) return GS_SU_PLANETOUCHED_GENASI_AIR;
  1134. if (sSubRace == GS_T_16777278) return GS_SU_PLANETOUCHED_GENASI_EARTH;
  1135. if (sSubRace == GS_T_16777279) return GS_SU_PLANETOUCHED_GENASI_FIRE;
  1136. if (sSubRace == GS_T_16777280) return GS_SU_PLANETOUCHED_GENASI_WATER;
  1137. if (sSubRace == GS_T_16777281) return GS_SU_PLANETOUCHED_TIEFLING;
  1138. if (sSubRace == GS_T_16777427) return GS_SU_SPECIAL_FEY;
  1139. if (sSubRace == GS_T_16777428) return GS_SU_SPECIAL_GOBLIN;
  1140. if (sSubRace == GS_T_16777429) return GS_SU_SPECIAL_KOBOLD;
  1141. if (sSubRace == GS_T_16777536) return GS_SU_SPECIAL_BAATEZU;
  1142. if (sSubRace == GS_T_16777582) return GS_SU_NEW_OROG; //Modified by JediMindTrix
  1143. if (sSubRace == GS_T_16777587) return GS_SU_HALFORC_GNOLL;
  1144. if (sSubRace == GS_T_16777594) return GS_SU_SPECIAL_RAKSHASA;
  1145. if (sSubRace == GS_T_16777596) return GS_SU_SPECIAL_DRAGON;
  1146.  
  1147. return GS_SU_NONE;
  1148. }
  1149. //----------------------------------------------------------------
  1150. string gsSUGetNameBySubRace(int nSubRace)
  1151. {
  1152. switch (nSubRace)
  1153. {
  1154. case GS_SU_DWARF_GOLD: return GS_T_16777263;
  1155. case GS_SU_DWARF_GRAY: return GS_T_16777264;
  1156. case GS_SU_DWARF_SHIELD: return GS_T_16777265;
  1157. case GS_SU_ELF_DROW: return GS_T_16777266;
  1158. case GS_SU_ELF_MOON: return GS_T_16777267;
  1159. case GS_SU_ELF_SUN: return GS_T_16777268;
  1160. case GS_SU_ELF_WILD: return GS_T_16777269;
  1161. case GS_SU_ELF_WOOD: return GS_T_16777270;
  1162. case GS_SU_GNOME_DEEP: return GS_T_16777271;
  1163. case GS_SU_GNOME_ROCK: return GS_T_16777272;
  1164. case GS_SU_HALFLING_GHOSTWISE: return GS_T_16777273;
  1165. case GS_SU_HALFLING_LIGHTFOOT: return GS_T_16777274;
  1166. case GS_SU_HALFLING_STRONGHEART: return GS_T_16777275;
  1167. case GS_SU_PLANETOUCHED_AASIMAR: return GS_T_16777276;
  1168. case GS_SU_PLANETOUCHED_GENASI_AIR: return GS_T_16777277;
  1169. case GS_SU_PLANETOUCHED_GENASI_EARTH: return GS_T_16777278;
  1170. case GS_SU_PLANETOUCHED_GENASI_FIRE: return GS_T_16777279;
  1171. case GS_SU_PLANETOUCHED_GENASI_WATER: return GS_T_16777280;
  1172. case GS_SU_PLANETOUCHED_TIEFLING: return GS_T_16777281;
  1173. case GS_SU_SPECIAL_FEY: return GS_T_16777427;
  1174. case GS_SU_SPECIAL_GOBLIN: return GS_T_16777428;
  1175. case GS_SU_SPECIAL_KOBOLD: return GS_T_16777429;
  1176. case GS_SU_SPECIAL_BAATEZU: return GS_T_16777536;
  1177. case GS_SU_NEW_OROG: return GS_T_16777582; //Modified by JediMindTri
  1178. case GS_SU_HALFORC_GNOLL: return GS_T_16777587;
  1179. case GS_SU_SPECIAL_RAKSHASA: return GS_T_16777594;
  1180. case GS_SU_SPECIAL_DRAGON: return GS_T_16777596;
  1181. }
  1182.  
  1183. return "";
  1184. }
  1185. //----------------------------------------------------------------
  1186. int gsSUGetECL(int nSubRace, int nLevel)
  1187. {
  1188. switch (nSubRace)
  1189. {
  1190. case GS_SU_DWARF_GOLD: return nLevel;
  1191. case GS_SU_DWARF_GRAY: return nLevel + 2;
  1192. case GS_SU_DWARF_SHIELD: return nLevel;
  1193. case GS_SU_ELF_DROW: return nLevel + 2;
  1194. case GS_SU_ELF_MOON: return nLevel;
  1195. case GS_SU_ELF_SUN: return nLevel;
  1196. case GS_SU_ELF_WILD: return nLevel;
  1197. case GS_SU_ELF_WOOD: return nLevel;
  1198. case GS_SU_GNOME_DEEP: return nLevel + 3;
  1199. case GS_SU_GNOME_ROCK: return nLevel;
  1200. case GS_SU_HALFLING_GHOSTWISE: return nLevel;
  1201. case GS_SU_HALFLING_LIGHTFOOT: return nLevel;
  1202. case GS_SU_HALFLING_STRONGHEART: return nLevel;
  1203. case GS_SU_PLANETOUCHED_AASIMAR: return nLevel + 1;
  1204. case GS_SU_PLANETOUCHED_GENASI_AIR: return nLevel + 1;
  1205. case GS_SU_PLANETOUCHED_GENASI_EARTH: return nLevel + 1;
  1206. case GS_SU_PLANETOUCHED_GENASI_FIRE: return nLevel + 1;
  1207. case GS_SU_PLANETOUCHED_GENASI_WATER: return nLevel + 1;
  1208. case GS_SU_PLANETOUCHED_TIEFLING: return nLevel + 1;
  1209. case GS_SU_SPECIAL_FEY: return nLevel + 2;
  1210. case GS_SU_SPECIAL_GOBLIN: return nLevel;
  1211. case GS_SU_SPECIAL_KOBOLD: return nLevel;
  1212. case GS_SU_SPECIAL_BAATEZU: return nLevel + 4;
  1213. case GS_SU_HALFORC_OROG: return nLevel;
  1214. case GS_SU_HALFORC_GNOLL: return nLevel + 1;
  1215. case GS_SU_SPECIAL_RAKSHASA: return nLevel + 5;
  1216. case GS_SU_SPECIAL_DRAGON: return nLevel + 4;
  1217. case GS_SU_NEW_OROG: return nLevel + 2; //Added by JediMindTrix
  1218. }
  1219.  
  1220. return nLevel;
  1221. }
  1222. //----------------------------------------------------------------
  1223. int gsSUGetFavoredClass(int nSubRace, int nGender = GENDER_MALE)
  1224. {
  1225. switch (nSubRace)
  1226. {
  1227. case GS_SU_DWARF_GOLD: return CLASS_TYPE_FIGHTER;
  1228. case GS_SU_DWARF_GRAY: return CLASS_TYPE_FIGHTER;
  1229. case GS_SU_DWARF_SHIELD: return CLASS_TYPE_FIGHTER;
  1230. case GS_SU_ELF_DROW:
  1231. if (nGender == GENDER_MALE) return CLASS_TYPE_WIZARD;
  1232. if (nGender == GENDER_FEMALE) return CLASS_TYPE_CLERIC;
  1233. return CLASS_TYPE_INVALID;
  1234. case GS_SU_ELF_MOON: return CLASS_TYPE_WIZARD;
  1235. case GS_SU_ELF_SUN: return CLASS_TYPE_WIZARD;
  1236. case GS_SU_ELF_WILD: return CLASS_TYPE_SORCERER;
  1237. case GS_SU_ELF_WOOD: return CLASS_TYPE_RANGER;
  1238. case GS_SU_GNOME_DEEP: return CLASS_TYPE_WIZARD;
  1239. case GS_SU_GNOME_ROCK: return CLASS_TYPE_WIZARD;
  1240. case GS_SU_HALFLING_GHOSTWISE: return CLASS_TYPE_BARBARIAN;
  1241. case GS_SU_HALFLING_LIGHTFOOT: return CLASS_TYPE_ROGUE;
  1242. case GS_SU_HALFLING_STRONGHEART: return CLASS_TYPE_ROGUE;
  1243. case GS_SU_PLANETOUCHED_AASIMAR: return CLASS_TYPE_PALADIN;
  1244. case GS_SU_PLANETOUCHED_GENASI_AIR: return CLASS_TYPE_FIGHTER;
  1245. case GS_SU_PLANETOUCHED_GENASI_EARTH: return CLASS_TYPE_FIGHTER;
  1246. case GS_SU_PLANETOUCHED_GENASI_FIRE: return CLASS_TYPE_FIGHTER;
  1247. case GS_SU_PLANETOUCHED_GENASI_WATER: return CLASS_TYPE_FIGHTER;
  1248. case GS_SU_PLANETOUCHED_TIEFLING: return CLASS_TYPE_ROGUE;
  1249. case GS_SU_SPECIAL_FEY: return CLASS_TYPE_DRUID;
  1250. case GS_SU_SPECIAL_GOBLIN: return CLASS_TYPE_ROGUE;
  1251. case GS_SU_SPECIAL_KOBOLD: return CLASS_TYPE_SORCERER;
  1252. case GS_SU_SPECIAL_BAATEZU: return CLASS_TYPE_FIGHTER;
  1253. case GS_SU_HALFORC_OROG: return CLASS_TYPE_FIGHTER;
  1254. case GS_SU_HALFORC_GNOLL: return CLASS_TYPE_RANGER;
  1255. case GS_SU_SPECIAL_RAKSHASA: return CLASS_TYPE_SORCERER;
  1256. case GS_SU_SPECIAL_DRAGON: return CLASS_TYPE_SORCERER;
  1257. case GS_SU_NEW_OROG: return CLASS_TYPE_FIGHTER;
  1258. }
  1259.  
  1260. return CLASS_TYPE_INVALID;
  1261. }
  1262.  
  1263. //----------------------------------------------------------------
  1264. string gsSUGetDescriptionBySubRace(int nSubRace)
  1265. {
  1266. switch (nSubRace)
  1267. {
  1268. case GS_SU_DWARF_GOLD: return GS_T_16777558;
  1269. case GS_SU_DWARF_GRAY: return GS_T_16777559;
  1270. case GS_SU_DWARF_SHIELD: return GS_T_16777560;
  1271. case GS_SU_ELF_DROW: return GS_T_16777561;
  1272. case GS_SU_ELF_MOON: return GS_T_16777562;
  1273. case GS_SU_ELF_SUN: return GS_T_16777563;
  1274. case GS_SU_ELF_WILD: return GS_T_16777564;
  1275. case GS_SU_ELF_WOOD: return GS_T_16777565;
  1276. case GS_SU_GNOME_DEEP: return GS_T_16777566;
  1277. case GS_SU_GNOME_ROCK: return GS_T_16777567;
  1278. case GS_SU_HALFLING_GHOSTWISE: return GS_T_16777568;
  1279. case GS_SU_HALFLING_LIGHTFOOT: return GS_T_16777569;
  1280. case GS_SU_HALFLING_STRONGHEART: return GS_T_16777570;
  1281. case GS_SU_PLANETOUCHED_AASIMAR: return GS_T_16777571;
  1282. case GS_SU_PLANETOUCHED_GENASI_AIR: return GS_T_16777572;
  1283. case GS_SU_PLANETOUCHED_GENASI_EARTH: return GS_T_16777573;
  1284. case GS_SU_PLANETOUCHED_GENASI_FIRE: return GS_T_16777574;
  1285. case GS_SU_PLANETOUCHED_GENASI_WATER: return GS_T_16777575;
  1286. case GS_SU_PLANETOUCHED_TIEFLING: return GS_T_16777576;
  1287. case GS_SU_SPECIAL_FEY: return GS_T_16777577;
  1288. case GS_SU_SPECIAL_GOBLIN: return GS_T_16777578;
  1289. case GS_SU_SPECIAL_KOBOLD: return GS_T_16777579;
  1290. case GS_SU_SPECIAL_BAATEZU: return GS_T_16777580;
  1291. case GS_SU_HALFORC_OROG: return GS_T_16777583;
  1292. case GS_SU_HALFORC_GNOLL: return GS_T_16777588;
  1293. case GS_SU_SPECIAL_RAKSHASA: return GS_T_16777595;
  1294. case GS_SU_SPECIAL_DRAGON: return GS_T_16777597;
  1295. case GS_SU_NEW_OROG: return GS_T_16777583;
  1296. }
  1297.  
  1298. return "";
  1299. }
  1300.  
  1301. int gsSUGetIsUnderdarker(int nSubRace)
  1302. {
  1303. switch (nSubRace)
  1304. {
  1305. case GS_SU_DWARF_GOLD:
  1306. case GS_SU_DWARF_SHIELD:
  1307. case GS_SU_ELF_MOON:
  1308. case GS_SU_ELF_SUN:
  1309. case GS_SU_ELF_WILD:
  1310. case GS_SU_ELF_WOOD:
  1311. case GS_SU_GNOME_ROCK:
  1312. case GS_SU_HALFLING_GHOSTWISE:
  1313. case GS_SU_HALFLING_LIGHTFOOT:
  1314. case GS_SU_HALFLING_STRONGHEART:
  1315. case GS_SU_PLANETOUCHED_AASIMAR:
  1316. case GS_SU_PLANETOUCHED_GENASI_AIR:
  1317. case GS_SU_PLANETOUCHED_GENASI_EARTH:
  1318. case GS_SU_PLANETOUCHED_GENASI_FIRE:
  1319. case GS_SU_PLANETOUCHED_GENASI_WATER:
  1320. case GS_SU_PLANETOUCHED_TIEFLING:
  1321. case GS_SU_SPECIAL_FEY:
  1322. return FALSE;
  1323. case GS_SU_DWARF_GRAY:
  1324. case GS_SU_ELF_DROW:
  1325. case GS_SU_GNOME_DEEP:
  1326. case GS_SU_SPECIAL_BAATEZU:
  1327. case GS_SU_SPECIAL_GOBLIN:
  1328. case GS_SU_SPECIAL_KOBOLD:
  1329. case GS_SU_HALFORC_OROG:
  1330. case GS_SU_HALFORC_GNOLL:
  1331. case GS_SU_SPECIAL_RAKSHASA:
  1332. case GS_SU_SPECIAL_DRAGON:
  1333. case GS_SU_NEW_OROG:
  1334. return TRUE;
  1335. }
  1336.  
  1337. return FALSE;
  1338. }
  1339.  
  1340. int gsSUGetIsHostileUnderdarker(int nSubRace)
  1341. {
  1342. switch (nSubRace)
  1343. {
  1344. case GS_SU_DWARF_GOLD:
  1345. case GS_SU_DWARF_SHIELD:
  1346. case GS_SU_ELF_MOON:
  1347. case GS_SU_ELF_SUN:
  1348. case GS_SU_ELF_WILD:
  1349. case GS_SU_ELF_WOOD:
  1350. case GS_SU_GNOME_ROCK:
  1351. case GS_SU_HALFLING_GHOSTWISE:
  1352. case GS_SU_HALFLING_LIGHTFOOT:
  1353. case GS_SU_HALFLING_STRONGHEART:
  1354. case GS_SU_PLANETOUCHED_AASIMAR:
  1355. case GS_SU_PLANETOUCHED_GENASI_AIR:
  1356. case GS_SU_PLANETOUCHED_GENASI_EARTH:
  1357. case GS_SU_PLANETOUCHED_GENASI_FIRE:
  1358. case GS_SU_PLANETOUCHED_GENASI_WATER:
  1359. case GS_SU_PLANETOUCHED_TIEFLING:
  1360. case GS_SU_SPECIAL_FEY:
  1361. case GS_SU_GNOME_DEEP:
  1362. case GS_SU_HALFORC_GNOLL:
  1363. case GS_SU_SPECIAL_RAKSHASA:
  1364. case GS_SU_SPECIAL_DRAGON:
  1365. return FALSE;
  1366. case GS_SU_DWARF_GRAY:
  1367. case GS_SU_ELF_DROW:
  1368. case GS_SU_SPECIAL_BAATEZU:
  1369. case GS_SU_SPECIAL_GOBLIN:
  1370. case GS_SU_SPECIAL_KOBOLD:
  1371. case GS_SU_HALFORC_OROG:
  1372. case GS_SU_NEW_OROG:
  1373. return TRUE;
  1374. }
  1375.  
  1376. return FALSE;
  1377. }
  1378.  
  1379. int gsSUGetIsNeutralRace(int nSubRace)
  1380. {
  1381. switch (nSubRace)
  1382. {
  1383. case GS_SU_DWARF_GOLD:
  1384. case GS_SU_DWARF_SHIELD:
  1385. case GS_SU_ELF_MOON:
  1386. case GS_SU_ELF_SUN:
  1387. case GS_SU_ELF_WILD:
  1388. case GS_SU_ELF_WOOD:
  1389. case GS_SU_GNOME_ROCK:
  1390. case GS_SU_HALFLING_GHOSTWISE:
  1391. case GS_SU_HALFLING_LIGHTFOOT:
  1392. case GS_SU_HALFLING_STRONGHEART:
  1393. case GS_SU_PLANETOUCHED_AASIMAR:
  1394. case GS_SU_PLANETOUCHED_GENASI_AIR:
  1395. case GS_SU_PLANETOUCHED_GENASI_EARTH:
  1396. case GS_SU_PLANETOUCHED_GENASI_FIRE:
  1397. case GS_SU_PLANETOUCHED_GENASI_WATER:
  1398. case GS_SU_PLANETOUCHED_TIEFLING:
  1399. case GS_SU_SPECIAL_FEY:
  1400. case GS_SU_DWARF_GRAY:
  1401. case GS_SU_ELF_DROW:
  1402. case GS_SU_SPECIAL_BAATEZU:
  1403. case GS_SU_SPECIAL_GOBLIN:
  1404. case GS_SU_SPECIAL_KOBOLD:
  1405. case GS_SU_HALFORC_OROG:
  1406. case GS_SU_NEW_OROG: //Addition by JediMindTrix
  1407. return FALSE;
  1408. case GS_SU_GNOME_DEEP:
  1409. case GS_SU_HALFORC_GNOLL:
  1410. case GS_SU_SPECIAL_RAKSHASA:
  1411. case GS_SU_SPECIAL_DRAGON:
  1412. return TRUE;
  1413. }
  1414.  
  1415. return FALSE;
  1416. }
  1417.  
  1418. string gsSUGetRaceName(int nRacialType)
  1419. {
  1420. switch (nRacialType)
  1421. {
  1422. case RACIAL_TYPE_DWARF:
  1423. return "Dwarf";
  1424. case RACIAL_TYPE_ELF:
  1425. return "Elf";
  1426. case RACIAL_TYPE_GNOME:
  1427. return "Gnome";
  1428. case RACIAL_TYPE_HALFELF:
  1429. return "Half-Elf";
  1430. case RACIAL_TYPE_HALFLING:
  1431. return "Halfling";
  1432. case RACIAL_TYPE_HALFORC:
  1433. return "Half-Orc";
  1434. case RACIAL_TYPE_HUMAN:
  1435. return "Human";
  1436. }
  1437.  
  1438. return "";
  1439. }
  1440.  
  1441. int md_ConvertRaceToBit(int nRace)
  1442. {
  1443. switch(nRace)
  1444. {
  1445. case RACIAL_TYPE_DWARF: return MD_BIT_DWARF;
  1446. case RACIAL_TYPE_ELF: return MD_BIT_ELF;
  1447. case RACIAL_TYPE_HALFELF: return MD_BIT_HELF;
  1448. case RACIAL_TYPE_HALFLING: return MD_BIT_HLING;
  1449. case RACIAL_TYPE_HUMAN: return MD_BIT_HUMAN;
  1450. case RACIAL_TYPE_HALFORC: return MD_BIT_HORC;
  1451. case RACIAL_TYPE_GNOME: return MD_BIT_GNOME;
  1452. }
  1453.  
  1454. return 0; //whoops
  1455. }
  1456. int md_ConvertSubraceToBit(int nSubrace)
  1457. {
  1458. switch(nSubrace)
  1459. {
  1460. case GS_SU_DWARF_GRAY: return MD_BIT_DUERGAR;
  1461. case GS_SU_ELF_DROW: return MD_BIT_DROW;
  1462. case GS_SU_GNOME_DEEP: return MD_BIT_DEEP_GNOME;
  1463. case GS_SU_HALFORC_GNOLL: return MD_BIT_GNOLL;
  1464. case GS_SU_HALFORC_OROG: return MD_BIT_OROG;
  1465. case GS_SU_SPECIAL_FEY: return MD_BIT_FEY;
  1466. case GS_SU_SPECIAL_GOBLIN: return MD_BIT_GOBLIN;
  1467. case GS_SU_SPECIAL_KOBOLD: return MD_BIT_KOBOLD;
  1468. case GS_SU_NEW_OROG: return MD_BIT_OROG; //Addition by JediMindTrix.
  1469. }
  1470.  
  1471. return 0;
  1472. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement