Skip to content

Commit

Permalink
Merge pull request #115 from 4Luke4/cowled_wizards
Browse files Browse the repository at this point in the history
New component: More Sensible Cowled Wizards
  • Loading branch information
CamDawg authored Jan 10, 2025
2 parents 06ccdc5 + bea631a commit 3d24640
Show file tree
Hide file tree
Showing 7 changed files with 210 additions and 0 deletions.
2 changes: 2 additions & 0 deletions cdtweaks/languages/english/weidu.tra
Original file line number Diff line number Diff line change
Expand Up @@ -702,6 +702,8 @@ Use Baldur.lua options: a7_interval_ini
@341100 = ~Mage, priest, and innate spells only~
@341200 = ~All spells (check readme)~

@342000 = "More Sensible Cowled Wizards [Luke (EEex)]"

/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
///// \\\\\
Expand Down
2 changes: 2 additions & 0 deletions cdtweaks/languages/italian/weidu.tra
Original file line number Diff line number Diff line change
Expand Up @@ -627,6 +627,8 @@ Usa opzioni di Baldur.lua: a7_interval_ini

@336000 = ~Ripristina la nebbia di guerra nei sotterranei di Sigil~

@342000 = "Gli Stregoni Incappucciati reagiranno in maniera più sensata all'uso della magia senza licenza [Luke (EEex)]"

/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
///// \\\\\
Expand Down
15 changes: 15 additions & 0 deletions cdtweaks/lib/comp_3420.tpa
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\////\\\\////
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\////\\\\////
///// \\\\\////\\\\////
///// More Sensible Cowled Wizards \\\\\
///// \\\\\////\\\\////
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\////\\\\////
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\////\\\\////

WITH_SCOPE BEGIN
INCLUDE "cdtweaks\luke\misc.tph"
//
INCLUDE "cdtweaks\lib\cowled_wizards.tph"
//
LAF "COWLED_WIZARDS" END
END
53 changes: 53 additions & 0 deletions cdtweaks/lib/cowled_wizards.tph
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
DEFINE_ACTION_FUNCTION "COWLED_WIZARDS"
BEGIN
// patch relevant area scripts \\
WITH_SCOPE BEGIN
COPY_EXISTING
"ar0020.bcs" "override" // City Gates
"ar0300.bcs" "override" // The Docks
"ar0400.bcs" "override" // Slums
"ar0500.bcs" "override" // Bridge District
"ar0700.bcs" "override" // Waukeen's Promenade
"ar0900.bcs" "override" // Temple District
"ar1000.bcs" "override" // Government District
//
DECOMPILE_AND_PATCH BEGIN
// first relevant block
SET "found" = INDEX_BUFFER (CASE_SENSITIVE EXACT_MATCH ~CreateCreatureObjectDoor("COWENF2",LastTrigger,0,0,0)~)
//
PATCH_IF ("%found%" >= 0) BEGIN
SET "start" = RINDEX_BUFFER (CASE_SENSITIVE EXACT_MATCH ~SpellCast([PC],0)~ "%found%")
SET "end" = INDEX_BUFFER (CASE_INSENSITIVE EVALUATE_REGEXP ~$~ "%start%")
//
DELETE_BYTES "%start%" ("%end%" - "%start%")
//
INSERT_BYTES "%start%" STRING_LENGTH ~Global("gt_CowledWizardsTriggered","GLOBAL",1)~
WRITE_ASCII "%start%" ~Global("gt_CowledWizardsTriggered","GLOBAL",1)~
//
SET "found" = INDEX_BUFFER (CASE_SENSITIVE EXACT_MATCH ~CreateCreatureObjectDoor("COWENF2",LastTrigger,0,0,0)~)
INSERT_BYTES "%found%" STRING_LENGTH ~SetGlobal("gt_CowledWizardsTriggered","GLOBAL",0)~
WRITE_ASCII "%found%" ~SetGlobal("gt_CowledWizardsTriggered","GLOBAL",0)~
END
// second relevant block
SET "found" = INDEX_BUFFER (CASE_SENSITIVE EVALUATE_REGEXP ~[ %TAB%]*GlobalTimerNotExpired("SpellsBad","GLOBAL")~)
//
PATCH_IF ("%found%" >= 0) BEGIN
SET "start" = RINDEX_BUFFER (CASE_SENSITIVE EXACT_MATCH ~SpellCast([PC],0)~)
SET "end" = INDEX_BUFFER (CASE_INSENSITIVE EVALUATE_REGEXP ~$~ "%start%")
//
DELETE_BYTES "%start%" ("%end%" - "%start%")
//
INSERT_BYTES "%start%" STRING_LENGTH ~Global("gt_CowledWizardsTriggered","GLOBAL",1)~
WRITE_ASCII "%start%" ~Global("gt_CowledWizardsTriggered","GLOBAL",1)~
//
SET "found" = INDEX_BUFFER (CASE_SENSITIVE EXACT_MATCH ~Wait(1)~ "%start%")
INSERT_BYTES "%found%" STRING_LENGTH ~SetGlobal("gt_CowledWizardsTriggered","GLOBAL",0)~
WRITE_ASCII "%found%" ~SetGlobal("gt_CowledWizardsTriggered","GLOBAL",0)~
END
END
BUT_ONLY_IF_IT_CHANGES
END
// lua
LAF "APPEND_LUA_FUNCTION" STR_VAR "description" = "Utility" "sourceFileSpec" = "cdtweaks\luke\lua\utility\decode_spell.lua" "destRes" = "m_gtutil" END
LAF "APPEND_LUA_FUNCTION" STR_VAR "description" = "Misc Tweaks" "sourceFileSpec" = "cdtweaks\luke\lua\tweaks\cowled_wizards.lua" "destRes" = "m_gttwks" END
END
118 changes: 118 additions & 0 deletions cdtweaks/luke/lua/tweaks/cowled_wizards.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
--[[
+----------------------------------------+
| cdtweaks, more sensible cowled wizards |
+----------------------------------------+
--]]

-- set a GLOBAL var when a PC casts a wizard spell and is in Athkatla --

GTCOWENF = {

["typeMutator"] = function(context)
local actionSources = {
[EEex_Projectile_DecodeSource.CGameSprite_Spell] = true,
[EEex_Projectile_DecodeSource.CGameSprite_SpellPoint] = true,
[EEex_Projectile_DecodeSource.CGameAIBase_ForceSpell] = true,
[EEex_Projectile_DecodeSource.CGameAIBase_ForceSpellPoint] = true,
}
--
if not actionSources[context.decodeSource] then
return
end
end,

["projectileMutator"] = function(context)
local actionSources = {
[EEex_Projectile_DecodeSource.CGameSprite_Spell] = true,
[EEex_Projectile_DecodeSource.CGameSprite_SpellPoint] = true,
[EEex_Projectile_DecodeSource.CGameAIBase_ForceSpell] = true,
[EEex_Projectile_DecodeSource.CGameAIBase_ForceSpellPoint] = true,
}
--
if not actionSources[context.decodeSource] then
return
end
--
local originatingSprite = context["originatingSprite"] -- CGameSprite
--
local areaCheck = EEex_Trigger_ParseConditionalString('OR(7) \n AreaCheck("AR0020") AreaCheck("AR0300") AreaCheck("AR0400") AreaCheck("AR0500") AreaCheck("AR0700") AreaCheck("AR0900") AreaCheck("AR1000")')
--
local spellResRef = originatingSprite.m_curAction.m_string1.m_pchData:get()
if spellResRef == "" then
spellResRef = GT_Utility_DecodeSpell(originatingSprite.m_curAction.m_specificID)
end
--
local spellHeader = EEex_Resource_Demand(spellResRef, "SPL")
--
if spellHeader.itemType == 1 and areaCheck:evalConditionalAsAIBase(originatingSprite) then -- if wizard spell and in Athkatla ...
EEex_GameState_SetGlobalInt("gt_CowledWizardsTriggered", 1)
end
--
areaCheck:free()
end,

["effectMutator"] = function(context)
local actionSources = {
[EEex_Projectile_AddEffectSource.CGameSprite_Spell] = true,
[EEex_Projectile_AddEffectSource.CGameSprite_SpellPoint] = true,
[EEex_Projectile_AddEffectSource.CGameAIBase_ForceSpell] = true,
[EEex_Projectile_AddEffectSource.CGameAIBase_ForceSpellPoint] = true,
}
--
if not actionSources[context.addEffectSource] then
return
end
end,
}

--

EEex_Opcode_AddListsResolvedListener(function(sprite)
-- Sanity check
if not EEex_GameObject_IsSprite(sprite) then
return
end
-- internal function that applies the actual condition
local apply = function()
-- Mark the creature as 'condition applied'
sprite:setLocalInt("cdtweaksCowledWizards", 1)
--
local effectCodes = {
{["op"] = 321}, -- Remove effects by resource
{["op"] = 408}, -- Projectile mutator
}
--
for _, attributes in ipairs(effectCodes) do
sprite:applyEffect({
["effectID"] = attributes["op"] or EEex_Error("opcode number not specified"),
["durationType"] = 9,
["res"] = "GTCOWENF",
["m_sourceRes"] = "GTCOWENF",
["sourceID"] = sprite.m_id,
["sourceTarget"] = sprite.m_id,
})
end
end
-- Check creature's EA
local applyCondition = sprite.m_typeAI.m_EnemyAlly == 2 -- PC
--
if sprite:getLocalInt("cdtweaksCowledWizards") == 0 then
if applyCondition then
apply()
end
else
if applyCondition then
-- do nothing
else
-- Mark the creature as 'condition removed'
sprite:setLocalInt("cdtweaksCowledWizards", 0)
--
sprite:applyEffect({
["effectID"] = 321, -- Remove effects by resource
["res"] = "GTCOWENF",
["sourceID"] = sprite.m_id,
["sourceTarget"] = sprite.m_id,
})
end
end
end)
6 changes: 6 additions & 0 deletions cdtweaks/readme-cdtweaks.html
Original file line number Diff line number Diff line change
Expand Up @@ -1372,6 +1372,12 @@ <h3> <a id="contents_convenience" name="contents_convenience"></a>Convenience Tw
<li><em>Mage, priest, and innate spells</em> - as above, but adds spells traditionally in the innate and kit ability space such as Lay on Hands or Boon of Lathander</li>
<li><em>All spells</em> - because the game uses spells to perform a lot of different functions, such as traps or cutscene effects,this option may provide more feedback than desired or expose purely internal spell names such as &quot;just 10 damage&quot;. It is, however, the best way to guarantee that all spells from mods are caught</li>
</ul>

<p> <strong>More Sensible Cowled Wizards</strong><br />
<em><abbr title="Baldur's Gate: Enhanced Edition">EEex</abbr></em></p>
<p>As you probably know, party items that cast spell effects that are coded as "Wizard" spells can trigger the Cowled Wizards - even if the player didn't intend to actually cast an ordinary wizard spell.
This component simply makes sure that such items do not trigger the Cowled Wizards.
</p>
</div>
<div class="ribbon_rectangle_h3">
<h3> <a id="contents_npc" name="contents_npc"></a>Joinable <abbr title="Non-Player Character">NPC</abbr> Tweaks </h3>
Expand Down
14 changes: 14 additions & 0 deletions cdtweaks/setup-cdtweaks.tp2
Original file line number Diff line number Diff line change
Expand Up @@ -4292,6 +4292,20 @@ GROUP @4
SUBCOMPONENT @341000
LABEL ~cd_tweaks_casting_warnings_all~

/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
///// \\\\\
///// More Sensible Cowled Wizards \\\\\
///// \\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\

BEGIN @342000 DESIGNATED 3420
GROUP @4
REQUIRE_PREDICATE GAME_IS ~bg2ee eet~ @25
REQUIRE_PREDICATE MOD_IS_INSTALLED "EEex.tp2" 0 @29
LABEL ~cd_tweaks_more_sensible_cowled_wizards~

/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\
///// \\\\\
Expand Down

0 comments on commit 3d24640

Please sign in to comment.