Jump to content

Animations


Recommended Posts

I like pretty things, so I wanted to cover the ARE animation stuff I change. I'm just going to list my funky patches; I'm sure you must be getting exasperated with my vague reports, but I suck, sorry.

 

For the zpos stuff, BNOT hexnum is equivalent to - (negative) hexnum+1 (you'll have to do the conversion, sorry).

 

AR0307 - the twirly spike floors have a bad zpos, which causes the static tiles to show up through the animation (zpos has a *huge* effect on how animations are composited). This makes it look blurry with some graphics settings. Additionally, this affects the little torture wheel, which also needs to be drawn as background (otherwise, it obscures the target reticle, and you don't truly know Baldur's Gate II until you've seen 2/3 a target reticle!).

COPY_EXISTING AR0307.ARE OVERRIDE
READ_LONG 0xb0 ao
READ_BYTE ao + 0xa99 f
WRITE_BYTE ao + 0xa99 f | 0x1
WRITE_SHORT ao + 0x9b8 0x0
WRITE_SHORT ao + 0xa50 `0x33
WRITE_SHORT ao + 0xa9c `0x81

 

AR0312 - these houses have bad zpos for the sconces. It really only effects one on the back wall (left of the bed), but there was an area that was perfectly set up, so I just update them all to match.

COPY_EXISTING AR0312.ARE OVERRIDE
READ_LONG 0xb0 ao
WRITE_SHORT ao + 0x168 0x31
WRITE_SHORT ao + 0x1b4 0x34
WRITE_SHORT ao + 0x200 0x2e
WRITE_SHORT ao + 0x24c 0x3a
WRITE_SHORT ao + 0x298 0x31
WRITE_SHORT ao + 0x2e4 0x31
WRITE_SHORT ao + 0x330 0x31
WRITE_SHORT ao + 0x37c 0x38

 

AR0313 - nearly everywhere they have an oven, the animation is either incorrectly placed or has bad flags. I changed these ages (ages, ages) ago, so I'm not quite sure what they used to look like.

COPY_EXISTING AR0313.ARE OVERRIDE
READ_LONG 0xb0 ao
READ_SHORT ao + 0x34 f
WRITE_SHORT ao + 0x34 f | 0x140

 

AR0334 - nearly everywhere they use a forge/stove, the flames draw on top of the hood. I speculate this is due to the fact that the stoves in the Five Flagons are so much larger (where the positioning is correct). Anyway, simple change so they draw on top of the stove (as expected) but under the hood.

COPY_EXISTING AR0334.ARE OVERRIDE
READ_LONG 0xb0 ao
WRITE_SHORT ao + 0x38 0x0
WRITE_SHORT ao + 0x84 0x0

 

AR0335 - another bedroom/sconce issue.

COPY_EXISTING AR0335.ARE OVERRIDE
READ_LONG 0xb0 ao
WRITE_SHORT ao + 0x168 0x31
WRITE_SHORT ao + 0x1b4 0x34
WRITE_SHORT ao + 0x200 0x2e
WRITE_SHORT ao + 0x24c 0x3a
WRITE_SHORT ao + 0x298 0x31
WRITE_SHORT ao + 0x2e4 0x31
WRITE_SHORT ao + 0x330 0x31
WRITE_SHORT ao + 0x37c 0x38

 

AR0406 - another forge/stove issue.

COPY_EXISTING AR0406.ARE OVERRIDE
READ_LONG 0xb0 ao
WRITE_SHORT ao + 0x1040 0x0

 

AR0529 - another oven issue.

COPY_EXISTING AR0529.ARE OVERRIDE
READ_LONG 0xb0 ao
READ_SHORT ao + 0x34 f
WRITE_SHORT ao + 0x34 f | 0x140

 

AR0706 - another forge/stove issue.

COPY_EXISTING AR0706.ARE OVERRIDE
READ_LONG 0xb0 ao
WRITE_SHORT ao + 0x38 0x0
WRITE_SHORT ao + 0x84 0x0

 

AR0713 - guess what? Another oven issue.

COPY_EXISTING AR0713.ARE OVERRIDE
READ_LONG 0xb0 ao
READ_SHORT ao + 0x34 f
WRITE_SHORT ao + 0x34 f | 0x140
WRITE_LONG ao + 0x20 0x179014e

 

AR1004 - apparently, Deril's home doubles as a meth lab, and his oven pumps out yellow smoke. I don't want to say it's positively a bug, but it's the only place where they would have said "Let's make it yellow!"

COPY_EXISTING AR1004.ARE OVERRIDE
READ_LONG 0xb0 ao
READ_SHORT ao + 0x3c4 f
WRITE_SHORT ao + 0x3c4 f ^^ 0x104

 

AR1601 - a bad flag keeps Desharik's oven from smoking. I'm split on this, as there is no oven ambient, but if you go around paying attention to these things, you'll soon realize how many animations and ambient sounds BioWare simply couldn't be bothered to correctly place.

COPY_EXISTING AR1601.ARE OVERRIDE
READ_LONG 0xb0 ao
READ_BYTE ao + 0x3c4 f
WRITE_BYTE ao + 0x3c4 f & `0x80

 

AR1603 - you won't believe it, but another forge/stove issue.

COPY_EXISTING AR1603.ARE OVERRIDE
READ_LONG 0xb0 ao
WRITE_SHORT ao + 0x38 0x0
WRITE_SHORT ao + 0x84 0x0

 

AR2001 - please, God, make this the last forge/stove issue.

COPY_EXISTING AR2001.ARE OVERRIDE
READ_LONG 0xb0 ao
WRITE_SHORT ao + 0x38 0x0
WRITE_SHORT ao + 0x84 0x0

 

AR2300 - two of the water spouts by the eastern path (just down the rebel stairs, in the chamber with Sekolah's tooth door) have a bad zpos. The first draws over the shell, the second over the wall. Smooth. Updated zpos to draw behind the shell (and behind the crab claw) and behind the wall.

COPY_EXISTING AR2300.ARE OVERRIDE
READ_LONG 0xb0 ao
WRITE_SHORT ao + 0x38 `0x10
WRITE_SHORT ao + 0xd0 `0x2c

Link to comment

This is some very groovy stuff. I've started a Fixpack screenshot gallery for folks to see the graphical fixes and to complement the written documentation.

 

AR1004 - apparently, Deril's home doubles as a meth lab, and his oven pumps out yellow smoke. I don't want to say it's positively a bug, but it's the only place where they would have said "Let's make it yellow!"

This looks intentional, or at least intentional enough for me to leave it be.

 

AR1601 - a bad flag keeps Desharik's oven from smoking. I'm split on this, as there is no oven ambient, but if you go around paying attention to these things, you'll soon realize how many animations and ambient sounds BioWare simply couldn't be bothered to correctly place.

I've got smoke from this oven in my game.

Link to comment
I've got smoke from this oven in my game.
It may be your graphics settings. Some of the flags prevent playback when certain graphics settings are disabled (with some settings, for instance, a lot of the smoke animations in ToB will be absent).

 

Or not. It's been a long time.

Link to comment
I've got smoke from this oven in my game.
It may be your graphics settings. Some of the flags prevent playback when certain graphics settings are disabled (with some settings, for instance, a lot of the smoke animations in ToB will be absent).

 

Or not. It's been a long time.

Heh.

 

Also, I can't see what the changes to the other two spike wheel animations in ar0307 are doing.

Link to comment

On the Mac version, at least, with certain graphics settings, the background tile shows through the animation (making it look like the spikes are fading to the next step). It looks hideous.

 

This just sets the zpos so that the animations are drawing "on top" of the tile (rather than "inside" it).

 

There's also a flag missing from the overhead orbs in the first level of Watcher's Keep that causes them to appear green and be partially obscured by the background tile with certain graphics settings (in the Mac version, at least):

READ_LONG 0xb0 ao
READ_BYTE ao + 0x118 f
WRITE_BYTE ao + 0x118 f | 0x80
READ_BYTE ao + 0x164 f
WRITE_BYTE ao + 0x164 f | 0x80
READ_BYTE ao + 0x1b0 f
WRITE_BYTE ao + 0x1b0 f | 0x80
READ_BYTE ao + 0x1fc f
WRITE_BYTE ao + 0x1fc f | 0x80
READ_BYTE ao + 0x248 f
WRITE_BYTE ao + 0x248 f | 0x80

Link to comment

Excellent; this is coded and added. If anyone is experiencing the graphical glitches that devSin is describing in ar0307, ar1601, or ar3001 (I'm also not seeing the WK globe issues), I'd love to get before-and-after screenies for the gallery.

 

// animation glitches due to bad layering/flags
COPY_EXISTING ~ar0307.are~ ~override~
 READ_LONG 0xac "anim_num"
 READ_LONG 0xb0 "anim_off"
 FOR (index = 0; index < anim_num; index = index + 1) BEGIN
READ_ASCII ("%anim_off%" + ("%index%" * 0x4c)) "anim_name"
PATCH_IF ("%anim_name%" STRING_COMPARE_CASE "am307tt1" = 0) BEGIN // spiky wheel in torturer's room
  READ_BYTE   ("%anim_off%" + 0x35 + ("%index%" * 0x4c)) "flags"
  WRITE_BYTE  ("%anim_off%" + 0x35 + ("%index%" * 0x4c)) ("%flags%" BOR 0b00000001) // adds draw as background flag
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0xff7e // height
END ELSE
PATCH_IF ("%anim_name%" STRING_COMPARE_CASE "am307ur1" = 0) BEGIN // spiky wheel you run across
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0 // height
END ELSE
PATCH_IF ("%anim_name%" STRING_COMPARE_CASE "am307ur3" = 0) BEGIN // another spiky wheel you run across
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0xffcc // height
END
 END
 BUT_ONLY_IF_IT_CHANGES

// animation glitches due to bad layering
COPY_EXISTING ~ar0312.are~ ~override~
		  ~ar0335.are~ ~override~
 READ_LONG 0xac "anim_num"
 READ_LONG 0xb0 "anim_off"
 FOR (index = 0; index < anim_num; index = index + 1) BEGIN
READ_SHORT ("%anim_off%" + 0x20 + ("%index%" * 0x4c)) "x_coord"
READ_SHORT ("%anim_off%" + 0x22 + ("%index%" * 0x4c)) "y_coord"
PATCH_IF ((("%x_coord%" = 180) AND ("%y_coord%" = 304)) OR
		  (("%x_coord%" = 170) AND ("%y_coord%" = 310)) OR
		  (("%x_coord%" = 552) AND ("%y_coord%" = 107)) OR
		  (("%x_coord%" = 573) AND ("%y_coord%" = 114)))  BEGIN // sconce
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0x31 // height
END ELSE
PATCH_IF (("%x_coord%" = 438) AND ("%y_coord%" = 121)) BEGIN // sconce
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0x34 // height
END ELSE
PATCH_IF (("%x_coord%" = 670) AND ("%y_coord%" = 188)) BEGIN // sconce
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0x2e // height
END ELSE
PATCH_IF (("%x_coord%" = 426) AND ("%y_coord%" = 129)) BEGIN // sconce
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0x3a // height
END ELSE
PATCH_IF (("%x_coord%" = 680) AND ("%y_coord%" = 194)) BEGIN // sconce
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0x38 // height
END
 END
 BUT_ONLY_IF_IT_CHANGES

// animation glitches due to bad flags
COPY_EXISTING ~ar0313.are~ ~override~
		  ~ar0529.are~ ~override~
		  ~ar0713.are~ ~override~
 READ_LONG 0xac "anim_num"
 READ_LONG 0xb0 "anim_off"
 FOR (index = 0; index < anim_num; index = index + 1) BEGIN
READ_ASCII ("%anim_off%" + ("%index%" * 0x4c)) "anim_name"
PATCH_IF ("%anim_name%" STRING_COMPARE_CASE "am003xa" = 0) BEGIN // oven
  WRITE_SHORT ("%anim_off%" + 0x20 + ("%index%" * 0x4c)) 334 // x coord, only wrong in ar0713
  WRITE_SHORT ("%anim_off%" + 0x22 + ("%index%" * 0x4c)) 377 // y coord, only wrong in ar0713
  READ_BYTE   ("%anim_off%" + 0x34 + ("%index%" * 0x4c)) "flags"
  WRITE_BYTE  ("%anim_off%" + 0x34 + ("%index%" * 0x4c)) ("%flags%" BOR  0b01000000) // adds not covered by wall flag
  READ_BYTE   ("%anim_off%" + 0x35 + ("%index%" * 0x4c)) "flags"
  WRITE_BYTE  ("%anim_off%" + 0x35 + ("%index%" * 0x4c)) ("%flags%" BOR 0b00000001) // adds draw as background flag
END
 END
 BUT_ONLY_IF_IT_CHANGES

// animation glitches due to bad layering
COPY_EXISTING ~ar0334.are~ ~override~
		  ~ar0406.are~ ~override~
		  ~ar0706.are~ ~override~
		  ~ar1603.are~ ~override~
		  ~ar2001.are~ ~override~
 READ_LONG 0xac "anim_num"
 READ_LONG 0xb0 "anim_off"
 FOR (index = 0; index < anim_num; index = index + 1) BEGIN
READ_ASCII ("%anim_off%" + ("%index%" * 0x4c)) "anim_name"
PATCH_IF ("%anim_name%" STRING_COMPARE_CASE "fpit1s" = 0) BEGIN // forges
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0 // height
END
 END
 BUT_ONLY_IF_IT_CHANGES

// animation glitches due to bad flag
COPY_EXISTING ~ar1601.are~ ~override~
 READ_LONG 0xac "anim_num"
 READ_LONG 0xb0 "anim_off"
 FOR (index = 0; index < anim_num; index = index + 1) BEGIN
READ_ASCII ("%anim_off%" + ("%index%" * 0x4c)) "anim_name"
PATCH_IF ("%anim_name%" STRING_COMPARE_CASE "smoke" = 0) BEGIN // oven smoke plume
  READ_BYTE   ("%anim_off%" + 0x34 + ("%index%" * 0x4c)) "flags"
  WRITE_BYTE  ("%anim_off%" + 0x34 + ("%index%" * 0x4c)) ("%flags%" BAND  0b01111111) // remove show in fog of war flag
END
 END
 BUT_ONLY_IF_IT_CHANGES

// animation glitches due to bad layering
COPY_EXISTING ~ar2300.are~ ~override~
 READ_LONG 0xac "anim_num"
 READ_LONG 0xb0 "anim_off"
 FOR (index = 0; index < anim_num; index = index + 1) BEGIN
READ_SHORT ("%anim_off%" + 0x20 + ("%index%" * 0x4c)) "x_coord"
READ_SHORT ("%anim_off%" + 0x22 + ("%index%" * 0x4c)) "y_coord"
PATCH_IF (("%x_coord%" = 3590) AND ("%y_coord%" = 2171)) BEGIN // water spout
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0xffef // height
END ELSE
PATCH_IF (("%x_coord%" = 4116) AND ("%y_coord%" = 1641)) BEGIN // water spout
  WRITE_SHORT ("%anim_off%" + 0x38 + ("%index%" * 0x4c)) 0xffd3 // height
END
 END
 BUT_ONLY_IF_IT_CHANGES

// animation glitches due to bad flag
COPY_EXISTING ~ar3001.are~ ~override~
 READ_LONG 0xac "anim_num"
 READ_LONG 0xb0 "anim_off"
 FOR (index = 0; index < anim_num; index = index + 1) BEGIN
READ_ASCII ("%anim_off%" + ("%index%" * 0x4c)) "anim_name"
PATCH_IF ("%anim_name%" STRING_COMPARE_CASE "am3001f" = 0) BEGIN // glowing globes
  READ_BYTE   ("%anim_off%" + 0x34 + ("%index%" * 0x4c)) "flags"
  WRITE_BYTE  ("%anim_off%" + 0x34 + ("%index%" * 0x4c)) ("%flags%" BOR  0b10000000) // add show in fog of war flag
END
 END
 BUT_ONLY_IF_IT_CHANGES

Link to comment

You know, if you grab the free NetBeans Java IDE from Sun and NI's source code, it's easy as pie to add all the IESDP updates to the structures Jon Olav created. I think he designed it that way on purpose just so he could update things quickly. And if you ever need to rename some variable, just right-click and ReFactor it. No real knowledge of Java is necessary. (Well, it was easy for me, but sometimes I take my 20 years of casual programming experiences for granted.)

Link to comment

Archived

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

×
×
  • Create New...