Skip to content

Implement Gothic I Pyrokinesis - #1055

Open
Abendlied wants to merge 2 commits into
Try:masterfrom
Abendlied:implement-g1-pyrokinesis
Open

Abendlied wants to merge 2 commits into
Try:masterfrom
Abendlied:implement-g1-pyrokinesis

Conversation

@Abendlied

Copy link
Copy Markdown
Contributor

Refers to Pyrokinesis Issue: #1052

Added spell Pyrokinesis handling for Gothic I

  • Added caster (Player) and target (NPC, monster, Orc) effects for Gothic I Pyrokinesis while casting the spell
  • Trigger damage infliction on the target and stop when casting ends, mana is depleted or casting is interrupted
  • Persistent effects across animation changes
  • Remove persistent effects when the affected target dies
  • Restrict to Gothic I, not interfering with other spells and Gothic II spells

Verification:
Tested Pyrokinesis against NPCs, monsters and Orcs.
Verified damage against targets with different magic protection values.
Checked for regression on other AOE spells such as Gothic I Fire Rain, Ice Wave as well as Gothic II Fire Rain.

Known gap: Pyrokinesis now does not kill, it only strikes NPC down, also after multiple attempts. XP is granted after each strike down, infinitely. I aim to fix this in a separate PR.

Note: Possible additional cleanup case: Npc::closeWeapon() resets spell-casting state without calling stopSpellTargetEffect(). This can potentially and by chance happen when entering water (falling from an edge, tripping while casting?) and closing the spell wielding weapon state. I could not reproduce this in a normal gameplay but it might be possible by chance. I have therefore left this out of the PR. @Try Let me know if you think it should also be handled in closeWeapon().

@Try

Try commented Nov 1, 2026

Copy link
Copy Markdown
Owner

Hi, @Abendlied !

spellFX_Pyrokinesis_target
MFX_PYROKINESIS_ORIGIN

This looks more like a hack then a real fix. Why do you refer explicit spell names in engine code? Is there any evidence that original game also handle pyrokinesis as hack-in?

@Abendlied

Abendlied commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor Author

Hi, @Abendlied !

spellFX_Pyrokinesis_target
MFX_PYROKINESIS_ORIGIN

This looks more like a hack then a real fix. Why do you refer explicit spell names in engine code? Is there any evidence that original game also handle pyrokinesis as hack-in?

Agree, putting the explicit spell resource name in engine code was indeed hacky. I have no evidence supporting this either. So I tried to generalise more.

  • Target effects are now resolved generic through the active spell emFXInvestTarget metadata
  • Resolved VisualFx is retained and used for cleanup, instead of again using hard-coded name hack
  • Removed MFX_PYROKINESIS_ORIGIN particle effect. The existing Invest-key handling already produces the caster-hand visual, we should use this instead.

Verification:
Tested Pyrokinesis against NPCs, monsters and Orcs.
Verified damage against targets with different magic protection values.
Checked for regression on other AOE spells in Gothic I and Gothic II.

Known gap 1: Pyrokinesis does not kill NPCs at 0 HP, it only strikes NPC down, repeatedly. NPC death state handling can likely be fixed in a separate PR.

Known gap 2: XP is granted after each strike down, not respecting that XP was already granted. This is a separate bug - Not sure if this also existed in the original game.

@Abendlied

Copy link
Copy Markdown
Contributor Author

Regarding failed linux check, case sensitivity?
spacer/ui/controls/checkwidget.h includes Tempest/Checkbox
Tempest revision exports CheckBox.
Obligatory "Gothic2Notr builds successfully on my machine".

Try added a commit that referenced this pull request Nov 2, 2026
@Try

Try commented Nov 2, 2026

Copy link
Copy Markdown
Owner

Verification

This is verified in opengothic only, right? I'm considering to wait for Spacer first, and them it would be possible to easily conduct mini-mod tests - this should be much more efficient than a guess work

Tempest revision exports CheckBox.

My bad, sorry

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants