Jump to content
Sign in to follow this  
Ascension64

[BG2:ToB] Other tiddly-bits in file format

Recommended Posts

PRO V1.0

0x8 Projectile type

You can also have a value of 1, which specifies a BAM-less projectile. File size is 0xF8 if I recall correctly, and so the structure only goes to 0xF8 in the file description.

 

0xC Flags

Treated as a DWORD, so 0xE is part of this field

Why "sparking" flags?

 

Bit0: Show sparkle

Not "sparks".

 

Bit1: Use height

Uses z coordinates, but doesn"t necessarily mean "flying" when z = 0

 

Bit2: Loop on creation sound

Bit3: Loop destination reached sound

 

Bit4: Do no affect target

For preset target projectiles, will not apply effects to the target. Useful for area projectiles where the targetted object is not affected.

 

Bit5: Draw underneath animate objects

Definitely not "snail trail sparks". Determines whether the projectile is drawn below animate objects, meaning that animate objects are drawn on top of the projectile. Used in-game for thief trap projectiles.

 

0x10 Travelling sound

Sound to play when projectile is travelling to target location

 

0x18 Destination reached sound

Sound to play when projectile is at its destination

 

0x20 Travelling visual effect

Visual effect (VEF, VVC, BAM) animation when travelling to target location

 

0x28 Sparkle colour

Reference to SPRKLCLR.2DA (row number)

1: BLACK (5)

2: BLUE (0)

3: CHROMATIC (6)

4: GOLD (1)

5: GREEN (8)

6: PURPLE (2)

7: RED (7)

8: WHITE (9)

9: ICE (3)

10: STONE (4)

11: MAGENTA (10)

12: ORANGE (11)

 

0x2c Unused

Not unmarshalled

 

 

 

0x100 BAM Flags

I would call it "BAM projectile flags", since it applies to a BAM projectile.

Bit0: Enable BAM colouring. This really means use the palette at 0x11C.

 

Bit2: Unused

 

Bit3: Use area lighting

Identical to dispbit16 (color bit0) for VVC.

 

Bit4: Use area height

Uses the area height map to adjust Y position.

 

Bit7: Enable brighten (required for bit8 and bit9 to work)

Bit8: Low level brighten (identical to setting seqbit7 in VVC)

Bit9: Brighten and blend (identical to setting dispbit3 in VVC)

 

0x12b Smoke period

I call this period instead of delay, since if p = period, 3 smoke objects are created every p ticks. A delay would imply wait p ticks, then play every tick following it.

 

0x133 Face target granularity

Not tested, but this looks suspiciously like the number of orientations of the BAM file used by the BAM projectile. (similar to number of orientations in VVC format but with the mirroring already calculated)

 

0x136 Trail animation 1

0x13e Trail animation 2

0x146 Trail animation 3

VEF, VVC, BAM.

 

0x14e Trail animation 1 period

0x150 Trail animation 2 period

0x152 Trail animation 3 period

Play animation 1 or 2 or 3 every x ticks, where x is the value of this field.

 

0x154 Unused

Not unmarshalled

 

 

 

0x200 Area flags

Description looks OK, although I would call it "area projectile flags" since it applies only to the area projectile struct. This is interpreted as a DWORD, so includes field 0x202

 

Bit0: Projectile remains visible at destination

If 0, the projectile and shadow animations will travel to the destination, then disappear

 

Bit1: Triggered by "inanimate" objects

Specifically, the trigger can be triggered by objects that have [EA=neutral, GENERAL=255, RACE=255, CLASS=255, SPECIFIC=255, ALIGNMENT=255, GENDER=255]

 

Bit2: Use trigger

Note that default behaviour is to explode as soon as the projectile reaches the destination. This bit makes the projectile hold position until objects trigger the explosion.

 

Bit3: Trigger during delay

During trigger downtime, object will trigger, but won"t count in the trigger count, and objects caught in the trigger will only have effects applied if within the trigger radius, and if not in impassable terrain.

 

Bit4: Projectile on explosion

On explosion, makes a projectile as specified in 0x214 starting at the caster and extending to the explosion location (graphical only)

 

Bit5: Chunks on explosion

On an explosion, creates a random number of chunking animations as specified in 0x212 at the explosion location

 

Bit6: Triggers on and targets opposite enemy-ally

Bit7: Triggers on and targets same enemy-ally (requires bit6 to be set)

 

Bit8: Number of triggers equal to cast mage level

Bit9: Number of triggers equal to cast cleric level

Triggers can trigger multiple times. This will allow the trigger to be triggered (mage/cleric level) times before purging. Mage takes priority, over cleric. If both are zero, then 0x216 will be used as the trigger count.

 

Bit10: Visual effect on explosion

On an explosion, creates a visual effect (VEF, VVC, BAM) at the explosion location as specified in 0x21c)

 

Bit12: Affect objects through wall, mountain, building, and off-area

If set, objects within the effect radius who are impeded by wall (green on search map), mountain/building (pink on search map), or off-area (black on search map), are affected by the explosion. Note that triggers never trigger through these search map surface types.

 

Bit13: Check triggers from animation frame 30

Requires bit0 to be set. The trigger will only be checked when the projectile animation is at frame 30 or above.

 

Bit14: Wait for period before trigger check

If not set, the trigger is checked in the first frame, then the trigger check period is elapsed before checking again. If set, the first frame check does not take place. The trigger check period is specified in 0x210.

 

Bit15: Affect only one target

Only affects the first valid target

 

 

 

0x206 Explosion radius

I guess "Area of effect" is an OK label to use.

 

0x208 Explosion sound

"Trigger sound" is just as good I suppose.

 

0x210 Trigger check period

Length of delay (in ticks) until trigger is checked for objects within the trigger radius.

 

0x212 Explosion chunks animation

0x214 Explosion projectile animation

See area flags for more info.

 

0x216 Trigger count

Not really "duration". This is the number of times the trap can be triggered before purging. I guess for a projectile with no trigger, it will explode (trigger count) times before purging. You could call it explosion count...

 

0x217 Explosion animation

From FIREBALL.IDS. Note that the explosion animation will only be played once. The CProjectileArea struct nExplosionAnimId is set to -1 after use. Therefore, whichever trigger causes the explosion the first time (during delay, on trigger check, etc.), every subsequent trigger will no longer play the explosion.

 

0x218 Explosion colour

This colour is used for all values for the explosion animation colour range palette (i.e. major, minor, skin, leather, etc.).

 

0x219 Unused padding

 

0x21a Explosion victim projectile

For every object caught in the explosion, this projectile is created on them. It also carries the effects that will be applied onto the object. Think chain lightning.

 

0x21c Explosion visual effect animation

See area flags for more info.

 

0x224 Cone shape angle

Takes values from 1-359, not "0x0 to 0xFF" as described.

 

0x226 Unused

Not unmarshalled.

 

 

 

 

 

ARE V1.0 Projectile traps

0x10 Ticks until next trigger check

0x12 Triggers remaining (or "explosion count")

0x1a Enemy-ally targetting

0x1b Party member index that created this projectile (0-5)

Edited by Ascension64

Share this post


Link to post

Things about triggers

Triggers found in SVTRIOBJ.IDS have their identifiers saved in LastTrigger so are compatible with the Trigger trigger

 

GAM V1.1 NPC struct

0x002C 96 bytes

An array of 24 DWORDs, each DWORD corresponds to NPC.IDS entry, used by NumTimesInteractedWith() trigger

 

Things about actions

-Probably already know, but Continue() must be at the end of an action list

-Actions listed in NoDecode.ids do not decode any object.ids identifiers when loading a new action in the queue, despite the IESDP saying the file has no effect. Is it really the case though, since AttackReevaluate can resolve the object.ids identifiers according to existing scripts

-Actions listed in ActSleep.ids should work on sleeping/dead creatures

-Probably already know, actions listed in Instant.ids execute immediately in the same script round

 

PRO V1.0

0x20 WAVC file

-This is actually the ResRef to a Visual Effect file (VEF, VVC, or BAM). There is code for loading the visual effect, but I haven\'t worked out how exactly it is used.

Edited by Ascension64

Share this post


Link to post
PRO V1.0

0x100 Flags

Bit8: Very similar to setting seqbit9 in VVC sequence flags (no3d only)

You only show seqbits 0-8 being used? You mean display bit 9?

 

GAM V1.1 NPC struct

0x002C 96 bytes

An array of 24 DWORDs, each DWORD corresponds to NPC.IDS entry, used by NumTimesInteractedWith() trigger

These were found earlier, but I don't think they've ever actually been stored (the array is there in all IE games, but none have ever actually stored the Interact() count)? (We ignore it in NI because I don't want to have all the useful stuff moved further down the list with 24 rows of useless.)

 

Are you sure all the SvTriObj are stored? I know I've always assumed the relationship with LastTrigger, but I'm pretty sure I had looked once upon a time and found that some of the stuff in the file (See(), etc.) won't be saved as LastTrigger.

Share this post


Link to post
Guest Guest
Things about actions

-Probably already know, but Continue() must be at the end of an action list

-Actions listed in NoDecode.ids do not decode any object.ids identifiers when loading a new action in the queue, despite the IESDP saying the file has no effect. Is it really the case though, since AttackReevaluate can resolve the object.ids identifiers according to existing scripts

-Actions listed in ActSleep.ids should work on sleeping/dead creatures

-Probably already know, actions listed in Instant.ids execute immediately in the same script round

 

Any more specifics? What if Continue() isn't at the end? Not decoding identifiers means you just don't get an object, or you get different behaviour when an action blocks? Actions not listed there are just ignored, or the whole queue is dropped? Instant actions are executed when added to the queue, or encountered in the queue, or encountered in the queue before a non-instant action? ??? New insights on those always interesting.

Share this post


Link to post

Bit8: Very similar to setting seqbit9 in VVC sequence flags (no3d only)

You only show seqbits 0-8 being used? You mean display bit 9?

Oh, I mean seqbit7, so Mid Level Brighten.

 

Since I am not at home, will get back to you about your other queries.

I haven't gotten a complete chronological picture of how the triggers/actions work yet, since I am yet to fully look at the AIUpdate() function. The annoying thing is how many superfluous CGameCreature members get played around with compared to its parent CGameSprite - makes understanding the code fully very difficult.

Share this post


Link to post

Have you looked into the rest of the area projectile flags?

There are quite some that got only a tentative description (or nothing at all).

Most of them do something, though.

 

And again, a big thanks for the info, especially on the area projectile fields.

Edited by Avenger

Share this post


Link to post

Updated the first post for a more complete PRO V1.0 revision. There are three bits I am still confused about. The whole thing probably needs testing as well.

Share this post


Link to post
Bit 11 of area flags is missing, it enables the cone shape.

Yep, I didn't mention anything in the structured that looked correct already on IESDP.

Share this post


Link to post
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...