Editing DGRP resources


This page illustrates how to modify sprite placement values on the DGRP tab panel.

Sprite placement:
A given object tile may use one or more sprites, which are collectively referred to as a draw group. For example a computer object usually has separate sprites for the computer monitor and the screen display, as well as a hard disk light. The position for each of these sprites relative to the tile is defined in the DGRP resource. For multi-tile objects the situation becomes more complicated, since the different tiles have to be placed correctly on the lot grid. This discussion is mainly concerned with single-tile objects since the default interface shows one tile at a time, although tiles can also be viewed in context, as described below. The selected sprite can be changed with the sprite pop-up menu if necessary.

An object on its tile can be imagined to sit inside an invisible grid box formed by a base of tiles. This grid box is one wall panel in height and outlined in red in the tab panel graphic view. The X, Y coordinates as specified in the DGRP resource correspond to the lower left hand corner of the p-sprite bounding box. Note that in this particular coordinate system the centre of the tile is coordinate (0,0), the top of the screen is negative Y territory and the bottom is positive Y territory.

DGRP grid
Example of an object on its tile.
Birdhouse image courtesy of PJ at SimFreaks

Editing the sprite ID reference
If you enable this checkbox option, then you can edit the sprite ID. This will replace all instances of the old sprite ID in the current resource with the new sprite ID, and the old sprite image on screen will be replaced by the new sprite image.

Editing the X and Y coordinates
The X and Y coordinates can be altered directly by typing in new values, and the sprite will move accordingly. Values outside the range -999 to + 999 are ignored.

Editing the flip state
There is a check box which allows you to flip the sprite image if desired. If an SPR2 resource only contains six frames, you can generate twelve views in game by flipping the frames. This is frequently done for objects like chairs which have a plane of symmetry.

Editing the glow state
There is a check box which allows you to set the sprite image glow flag if desired. This was called the flicker state in earlier versions of IFFSnooper, since one of the main uses in game is to make fire sprites glow, and flicker when animated. Further investigation reveals that a sprite with this flag set will stay lit after dark, as if it were daytime. This can be used for mood lighting effects.


Are all DGRP resources organized the same way?
No. Most of the DGRP resources have version code 20004, but there are a few older versions which have fewer and/or shorter data fields. IFFSnooper is capable of displaying resource versions 20001, 20003 and 20004 correctly. The multisprite display for version 20000 (found in the original Maxis Computers.iff file) is still under investigation, as the PixelX and PixelY values seem to be handled differently than in later versions.

What is the bounding box?
This bounding box is defined in the SPR2 resource as part of a larger sprite frame, for reasons best known to EA/Maxis. The SPR2 tab panel display shows the sprite position relative to the top left corner of this larger frame. TMog does not show the bounding box in its drawgroup view.

Why is the computer/lamp/etc. sitting on the ground?
The final position of the object in game can be altered by the BHAV resources. This includes changing the position relative to the floor tile for objects that go on tables.

Object position in game can also be influenced by the drawgroup Z offset, as is the case for the Maxis fire alarm and the Maxis fireworks rocket.

What about animated objects?
Some drawgroups are part of an animation sequence. The length of this sequence is defined in the same OBJD resource which assigns the initial DGRP to a given tile. The animation is controlled by SimAntics code in the object's BHAV resources.

What about dynamic sprites?
Some of the sprites in a drawgroup may be defined as dynamic in the same OBJD resource which assigns the DGRP to a given tile. Dynamic sprites can be turned on and off in BHAV code to allow for further visual effects (such as removing pillows from the bed) or to allow for multiple visual states within one drawgroup (such as the snowman in Vacation).

What are the other values in the DGRP table?
A DGRP resource normally contains twelve sections, each defining the sprites used for a given view.

for each section there is for each sprite there is

The X and Y offset modifiers are not currently editable. This should not affect placement of a cloned object in game.

Tile display
The Show Tiles button overlays the DGRP view with a second set of coordinates for multi-tile objects, as defined by the OBJD subindex field. Dark blue coordinate values indicate tiles which are part of the object, while unused tiles have light blue coordinate values. Tiles are not shown if their coordinates are less than zero.

DGRP gridtiles
Example of a drawgroup with added tile coordinates (IFFSnooper 1.2.4, MacOS X 10.6.8).
File StairsSweepingReverse.iff by Maxis

Multitile display

The DGRP for a single tile of a multitile object can be seen in the context of adjacent tile sprites by selecting the submenu choice "Show context".

DGRP multitiles
Example of a drawgroup in context.
File StairsSweepingReverse.iff by Maxis

Multisprite display
The default DGRP display on the IFFSnooper tab panel is one sprite at a time. Nevertheless it may be useful to see all available sprites at once. The View -- DGRP resource submenus can modify how the DGRP sprites are displayed.

multisprite DGRP
Example of a drawgroup image with multiple sprites.
A green bounding box is shown for the "Fridge Outside" sprite.
File Fridges.iff by Maxis

See here for more details about multisprite display.

There is more information about sprites here



What are these resources?

Making new IFF files

Making Floor Tiles

Making Walls

Editing OBJD resources

Editing the GUID

Editing text strings

Editing draw groups

Editing sprites

Editing menu resources

Editing other resources