From b446669a0d46df1f4c6e7544002e4966cde8fc46 Mon Sep 17 00:00:00 2001 From: doug1234 Date: Wed, 4 Apr 2018 22:27:31 -0400 Subject: [PATCH 1/4] Added improved favored enemy. --- .../rules/feats/improved favored enemy.txt | 5 ++++ .../feats/feat - Improved Favored Enemy.py | 15 ++++++++++++ .../scr/tpModifiers/improved_favored_enemy.py | 23 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 tpdatasrc/tpgamefiles/rules/feats/improved favored enemy.txt create mode 100644 tpdatasrc/tpgamefiles/scr/feats/feat - Improved Favored Enemy.py create mode 100644 tpdatasrc/tpgamefiles/scr/tpModifiers/improved_favored_enemy.py diff --git a/tpdatasrc/tpgamefiles/rules/feats/improved favored enemy.txt b/tpdatasrc/tpgamefiles/rules/feats/improved favored enemy.txt new file mode 100644 index 000000000..ad9fa0d66 --- /dev/null +++ b/tpdatasrc/tpgamefiles/rules/feats/improved favored enemy.txt @@ -0,0 +1,5 @@ +name: Improved Favored Enemy +flags: 12582912 +prereqs: +description: You deal an extra 3 points of damage to your favored enemies. This benefit stacks with any existing favored enemy bonus gained from another class. +prereq descr: Base attack bonus +5 and favored enemy ability, \ No newline at end of file diff --git a/tpdatasrc/tpgamefiles/scr/feats/feat - Improved Favored Enemy.py b/tpdatasrc/tpgamefiles/scr/feats/feat - Improved Favored Enemy.py new file mode 100644 index 000000000..b975ad7b5 --- /dev/null +++ b/tpdatasrc/tpgamefiles/scr/feats/feat - Improved Favored Enemy.py @@ -0,0 +1,15 @@ +from toee import * + + +def CheckPrereq(attachee, classLevelled, abilityScoreRaised): + + #Return zero if base attack bonus is too low + if attachee.get_base_attack_bonus() < 5: + return 0 + + #Check for any favored enemy feat + for i in range (feat_favored_enemy_aberration , feat_favored_enemy_humanoid_human): + if attachee.has_feat(i): + return 1 + + return 0 diff --git a/tpdatasrc/tpgamefiles/scr/tpModifiers/improved_favored_enemy.py b/tpdatasrc/tpgamefiles/scr/tpModifiers/improved_favored_enemy.py new file mode 100644 index 000000000..493688ad0 --- /dev/null +++ b/tpdatasrc/tpgamefiles/scr/tpModifiers/improved_favored_enemy.py @@ -0,0 +1,23 @@ +#Improved Favored Enemy: Complete Warrior, p. 101 + +from templeplus.pymod import PythonModifier +from toee import * +import tpdp + +print "Registering Improved Favored Enemy" + +#Feat adds 3 extra damage +bon_val = 3 + +def impFavoredEnemyDamageBonus(attachee, args, evt_obj): + + target = evt_obj.attack_packet.target + favored_enemy = attachee.is_favored_enemy(target) + + if favored_enemy: + evt_obj.damage_packet.bonus_list.add_from_feat(bon_val, 0, 114, "Improved Favored Enemy") + return 0 + +impFavoredEnemy = PythonModifier("Improved Favored Enemy", 2) # args are just-in-case placeholders +impFavoredEnemy.MapToFeat("Improved Favored Enemy") +impFavoredEnemy.AddHook(ET_OnDealingDamage, EK_NONE, impFavoredEnemyDamageBonus, ()) From 72205f9d981e18141a10cd12bd80d9136bc297e7 Mon Sep 17 00:00:00 2001 From: doug1234 Date: Wed, 4 Apr 2018 22:28:47 -0400 Subject: [PATCH 2/4] Added is_favored_enemy method. --- TemplePlus/python/python_object.cpp | 131 ++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/TemplePlus/python/python_object.cpp b/TemplePlus/python/python_object.cpp index 662e1f3ed..6a2280932 100644 --- a/TemplePlus/python/python_object.cpp +++ b/TemplePlus/python/python_object.cpp @@ -1434,6 +1434,136 @@ static PyObject* PyObjHandle_ConditionAddWithArgs(PyObject* obj, PyObject* args) return PyInt_FromLong(result); } +static PyObject* PyObjHandle_FavoredEnemy(PyObject* obj, PyObject* args) { + auto self = GetSelf(obj); + if (!self->handle) + return PyInt_FromLong(0); + + objHndl critter; + if (!PyArg_ParseTuple(args, "O&:objhndl.is_favored_enemy", &ConvertObjHndl, &critter)) { + return 0; + } + + if (!critter) + return PyInt_FromLong(0); + + auto category = critterSys.GetCategory(critter); + int result = 0; + + switch (category) { + case mc_type_aberration: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_ABERRATION); + break; + case mc_type_animal: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_ANIMAL); + break; + case mc_type_beast: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_BEAST); + break; + case mc_type_construct: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_CONSTRUCT); + break; + case mc_type_elemental: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_ELEMENTAL); + break; + case mc_type_giant: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_GIANT); + break; + case mc_type_humanoid: + { + //Check the subtype (be careful since it could fall into more than one category, if so return the highest feat count) + int flags = critterSys.GetSubcategoryFlags(critter); + if (flags & mc_subtype_goblinoid) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_HUMANOID_GOBLINOID); + if (count > result) result = count; + } + if (flags & mc_subtype_reptilian) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_HUMANOID_REPTILIAN); + if (count > result) result = count; + } + if (flags & mc_subtype_dwarf) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_HUMANOID_DWARF); + if (count > result) result = count; + } + if (flags & mc_subtype_elf) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_HUMANOID_ELF); + if (count > result) result = count; + } + if (flags & mc_subtype_gnoll) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_HUMANOID_GNOLL); + if (count > result) result = count; + } + if (flags & mc_subtype_gnome) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_HUMANOID_GNOME); + if (count > result) result = count; + } + if (flags & mc_subtype_halfling) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_HUMANOID_HALFLING); + if (count > result) result = count; + } + if (flags & mc_subtype_orc) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_HUMANOID_ORC); + if (count > result) result = count; + } + if (flags & mc_subtype_human) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_HUMANOID_HUMAN); + if (count > result) result = count; + } + } + break; + case mc_type_ooze: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_OOZE); + break; + case mc_type_plant: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_PLANT); + break; + case mc_type_shapechanger: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_SHAPECHANGER); + break; + case mc_type_vermin: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_VERMIN); + break; + case mc_type_dragon: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_DRAGON); + break; + case mc_type_magical_beast: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_BEAST); + break; + case mc_type_monstrous_humanoid: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_MONSTROUS_HUMANOID); + break; + case mc_type_outsider: + { + //Check the subtype (since it could fall into more than one category be careful to return the highest count) + int flags = critterSys.GetSubcategoryFlags(critter); + if (flags & mc_subtype_evil) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_OUTSIDER_EVIL); + if (count > result) result = count; + } + if (flags & mc_subtype_good) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_OUTSIDER_GOOD); + if (count > result) result = count; + } + if (flags & mc_subtype_lawful) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_OUTSIDER_LAWFUL); + if (count > result) result = count; + } + if (flags & mc_subtype_chaotic) { + int count = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_OUTSIDER_CHAOTIC); + if (count > result) result = count; + } + } + break; + case mc_type_fey: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_FEY); + break; + case mc_type_undead: + result = feats.HasFeatCountByClass(self->handle, FEAT_FAVORED_ENEMY_UNDEAD); + break; + } + + return PyInt_FromLong(result); +} static PyObject* PyObjHandle_IsFlankedBy(PyObject* obj, PyObject* args) { auto self = GetSelf(obj); @@ -3269,6 +3399,7 @@ static PyMethodDef PyObjHandleMethods[] = { { "is_active_combatant", PyObjHandle_IsActiveCombatant, METH_VARARGS, NULL }, { "is_category_type", PyObjHandle_IsCategoryType, METH_VARARGS, NULL }, { "is_category_subtype", PyObjHandle_IsCategorySubtype, METH_VARARGS, NULL }, + { "is_favored_enemy", PyObjHandle_FavoredEnemy, METH_VARARGS, NULL }, { "is_flanked_by", PyObjHandle_IsFlankedBy, METH_VARARGS, NULL }, { "is_friendly", PyObjHandle_IsFriendly, METH_VARARGS, NULL }, { "is_unconscious", PyObjHandle_IsUnconscious, METH_VARARGS, NULL }, From cb95e4c6f646f0dee912b942c1488b38692fd8e1 Mon Sep 17 00:00:00 2001 From: doug1234 Date: Wed, 4 Apr 2018 22:30:43 -0400 Subject: [PATCH 3/4] Now correctly displaying max number of bardic music uses. --- TemplePlus/condition.cpp | 5 ++++- tpdatasrc/tpgamefiles/scr/tpModifiers/extra_music.py | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/TemplePlus/condition.cpp b/TemplePlus/condition.cpp index e802fc582..6266fb508 100644 --- a/TemplePlus/condition.cpp +++ b/TemplePlus/condition.cpp @@ -5160,10 +5160,13 @@ int ClassAbilityCallbacks::BardMusicRadial(DispatcherCallbackArgs args){ if (!bardLvl || perfSkill < 3) return 0; + //Ask python for the maximum number of uses of bardic music + int nMaxBardicMusic = d20Sys.D20QueryPython(args.objHndCaller, "Max Bardic Music"); + RadialMenuEntryParent bmusic(5039); bmusic.flags |= 0x6; bmusic.minArg = args.GetCondArg(0); - bmusic.maxArg = bardLvl; + bmusic.maxArg = nMaxBardicMusic; auto bmusicId = bmusic.AddChildToStandard(args.objHndCaller, RadialMenuStandardNode::Class); RadialMenuEntryAction insCourage(5040, D20A_BARDIC_MUSIC, BM_INSPIRE_COURAGE, "TAG_CLASS_FEATURES_BARD_INSPIRE_COURAGE"); diff --git a/tpdatasrc/tpgamefiles/scr/tpModifiers/extra_music.py b/tpdatasrc/tpgamefiles/scr/tpModifiers/extra_music.py index 3944a8f56..a83bbf628 100644 --- a/tpdatasrc/tpgamefiles/scr/tpModifiers/extra_music.py +++ b/tpdatasrc/tpgamefiles/scr/tpModifiers/extra_music.py @@ -10,14 +10,20 @@ def EMNewDay(attachee, args, evt_obj): BardicMusicCount = attachee.has_feat("Extra Music") - #Extra Music grants 4 additional uses of Bardic Music each time the feat is taken - #Max music per day remains 3, can't find a way to alter it. Works properly nonetheless. args.set_arg(0, args.get_arg(0) + BardicMusicCount * 4) return 0 + +def QueryMaxBardicMusic(attachee, args, evt_obj): + #Total uses = bard level + extra music count * 4 + MaxMusicCount = attachee.has_feat("Extra Music") * 4 + MaxMusicCount += attachee.stat_level_get(stat_level_bard) + evt_obj.return_val = MaxMusicCount + return 0 eSF = PythonModifier() eSF.ExtendExisting("Bardic Music") eSF.AddHook(ET_OnNewDay, EK_NEWDAY_REST, EMNewDay, ()) +eSF.AddHook(ET_OnD20PythonQuery, "Max Bardic Music", QueryMaxBardicMusic, ()) From 64b67d33b6f34ebfaa4c78ad7077311230464f93 Mon Sep 17 00:00:00 2001 From: doug1234 Date: Wed, 4 Apr 2018 22:32:31 -0400 Subject: [PATCH 4/4] Regenerated for improved favored enemy and bardic music update. --- tpdata/tpgamefiles.dat | Bin 3382331 -> 3383325 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tpdata/tpgamefiles.dat b/tpdata/tpgamefiles.dat index e4660d2e68160922e2b442f29662e91c53429701..125050fa26aeb341e0f26834e9f65b2e9a05c1c8 100644 GIT binary patch delta 15863 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⪋|3ZQ)V6A9R^WC;~N-iK4C-Q8$_BqN^lQ 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 BY#9Im delta 14753 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