Jump to content

some new sub structures in PST creature


Recommended Posts

This is a snippet from PST creature structure as IESDP knows it.


0x0270 52 (bytes) Unknown

0x029c 4 (dword) XP (Secondary class)

0x02a0 4 (dword) XP (Tertiary class)


on 0x294 there is an offset

and on 0x298 a memory size (not header count).

The offset points to a new structure which is basically a list of overlay effects on the actor.

These overlays are applied by opcode #201 (whose param #2 is the overlay type, and resource field is the overlay bam).


The overlay type seems to be a varied and haphazard group of effects which are implemented with different opcodes in bg2. Such spells as Shield, Armour, Balance in all things (a kind of fireshield).


So, a PST creature has a secondary effect list (mixed visual/stat affecting) to make my life harder :p



The structure of this new subheader is not determined yet.

The first 8 bytes contain a resref (the overlay bam)

The structure's length is 36 bytes (iirc) and also contains the effect type on a word.

The effect type could be 0-18 i think (with 5,9,10 unused or nonexistent).

Later i'll make a more specific list.

Link to comment

Yeah, i guess you expect the detailed list for the effects :)

I'll make it a bit later when i'm back into PST effect implementation.

Now, i'm sidetracked into implementing a correct script decompiler which i can use :D

Link to comment

Here is the list:


p2 resref spell name effect

0 - SPWI304 - Cloak of Warding - absorbs 3d4+level damage then removed, or level*5 seconds expired

1 - SPWI111 - Shield - AC = 3, +1 to saving throws, removed after level*25 seconds

2 - SPWI203 - Black Barbed Shield - +2 AC, attackers suffer 1d6 damage, removed after 10d3 seconds

3 - SPWI209 - Pain Mirror - hostile creatures nearby suffer the same damage as the caster, removed after level*5 seconds or after triggered once

4 - SPWI704 - Guardian Mantle - deflects all attacks if attacker doesn't make saving throw -4 vs. spells, removed after 50+level*5 seconds

5 - ?

6 - SPWI504 - Enoll Eva's Duplication - double projectiles?

7 - SPWI101 - Armor - AC = 6, removed after 8+level damage

8 - SPWI601 - Antimagic Shell - disables all projectiles? disables casting?

9 - ?

10- ?

11- SPPR201 - Flamewalk - 50% fire resistance, +2 saving throws vs. fire

12- SPPR106 - Protection from Evil - +2 AC vs. evil, +2 saving throws vs. evil

13- SPWI902 - Conflagration - 2d6 damage on target per 5 seconds, anyone comes close also suffers it, but entitled to save vs. spells

14- SPWI312 - Infernal Shield - 150% fire resistance (fire heals half damage).

15- SPWI119 - Submerge the Will - AC = 2, +1 to saving throws, removed after level*12 seconds

16- SPWI314 - Balance in All Things - hostile creatures nearby suffer the same damage as the caster, removed after level*5 seconds, can be triggered level/4 times

Link to comment

As you can see, the blackisle guys hardcoded quite diverse effects into this single opcode.


The only common thing is that all of these use some overlay on the actor (it would be a vvc which follows actor in bg2).

The overlays come along with diverse effects that might be triggered when the target is hit. (apply effect on condition in bg2)

The overlays may disappear after some amount of damage suffered (no bg2 equivalent?)

Some of the effects could be simulated with IDS targeting (protection from evil).

Link to comment

So, the struct is like this:

  0x00 8 (char array) resref
 0x08 2 (word) effect type (0-16)
 0x0a 26 (bytes) Unknown


With the effect type being in the range you posted?



EDIT: Fixed bb code.

Link to comment

To further increase weirdness, some projectiles also give out these overlays (with the additional effects).

One such projectile is 229 (shroud of darkness).


I start to hate those hackers at blackisle.



The shroud of darkness projectile starts the overlay with type 5.

So that's why i missed 5 (among some other numbers) from the list.

The unknown at 0ch seems to be a timing method style field.

If it is 0200 then the duration is relative.

If it is 0300 then the duration is absolute (like in this example).

Here is what i've learned so far:


00h BAM S048SPHR

08h UNKNOWN 00000040

0ch UNKNOWN 0300

0eh Type 0005

10h Duration ffb7a401

14h UNKNOWN 00000000

18h UNKNOWN 000000bc

20h UNKNOWN 00ffffff

24h UNKNOWN 00000000

Link to comment


This topic is now archived and is closed to further replies.

  • Create New...