newgrf_spritegroup.h
author Darkvater
Mon, 31 Jul 2006 22:40:55 +0000
changeset 4204 3aa39be759f2
parent 4057 863fce30596d
child 4817 116374e1a5f1
permissions -rw-r--r--
(svn r5688) - Forward-port the release-changes from the 0.4 branch back to trunk. This ensures an updated changelog, known-bugs, etc.
3595
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     1
/* $Id$ */
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     2
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     3
#ifndef NEWGRF_SPRITEGROUP_H
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     4
#define NEWGRF_SPRITEGROUP_H
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     5
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
     6
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
     7
typedef struct SpriteGroup SpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
     8
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
     9
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    10
/* 'Real' sprite groups contain a list of other result or callback sprite
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    11
 * groups. */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    12
typedef struct RealSpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    13
	// Loaded = in motion, loading = not moving
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    14
	// Each group contains several spritesets, for various loading stages
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    15
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    16
	// XXX: For stations the meaning is different - loaded is for stations
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    17
	// with small amount of cargo whilst loading is for stations with a lot
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    18
	// of da stuff.
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    19
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    20
	byte num_loaded;       ///< Number of loaded groups
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    21
	byte num_loading;      ///< Number of loading groups
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    22
	SpriteGroup **loaded;  ///< List of loaded groups (can be SpriteIDs or Callback results)
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    23
	SpriteGroup **loading; ///< List of loading groups (can be SpriteIDs or Callback results)
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    24
} RealSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    25
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    26
/* Shared by deterministic and random groups. */
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    27
typedef enum VarSpriteGroupScopes {
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    28
	VSG_SCOPE_SELF,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    29
	// Engine of consists for vehicles, city for stations.
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    30
	VSG_SCOPE_PARENT,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    31
} VarSpriteGroupScope;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    32
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    33
typedef enum DeterministicSpriteGroupSizes {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    34
	DSG_SIZE_BYTE,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    35
	DSG_SIZE_WORD,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    36
	DSG_SIZE_DWORD,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    37
} DeterministicSpriteGroupSize;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    38
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    39
typedef enum DeterministicSpriteGroupAdjustTypes {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    40
	DSGA_TYPE_NONE,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    41
	DSGA_TYPE_DIV,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    42
	DSGA_TYPE_MOD,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    43
} DeterministicSpriteGroupAdjustType;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    44
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    45
typedef enum DeterministicSpriteGroupAdjustOperations {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    46
	DSGA_OP_ADD,  // a + b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    47
	DSGA_OP_SUB,  // a - b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    48
	DSGA_OP_SMIN, // (signed) min(a, b)
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    49
	DSGA_OP_SMAX, // (signed) max(a, b)
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    50
	DSGA_OP_UMIN, // (unsigned) min(a, b)
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    51
	DSGA_OP_UMAX, // (unsigned) max(a, b)
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    52
	DSGA_OP_SDIV, // (signed) a / b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    53
	DSGA_OP_SMOD, // (signed) a % b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    54
	DSGA_OP_UDIV, // (unsigned) a / b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    55
	DSGA_OP_UMOD, // (unsigned) a & b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    56
	DSGA_OP_MUL,  // a * b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    57
	DSGA_OP_AND,  // a & b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    58
	DSGA_OP_OR,   // a | b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    59
	DSGA_OP_XOR,  // a ^ b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    60
} DeterministicSpriteGroupAdjustOperation;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    61
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    62
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    63
typedef struct DeterministicSpriteGroupAdjust {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    64
	DeterministicSpriteGroupAdjustOperation operation;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    65
	DeterministicSpriteGroupAdjustType type;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    66
	byte variable;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    67
	byte parameter; ///< Used for variables between 0x60 and 0x7F inclusive.
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    68
	byte shift_num;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    69
	uint32 and_mask;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    70
	uint32 add_val;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    71
	uint32 divmod_val;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    72
} DeterministicSpriteGroupAdjust;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    73
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    74
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    75
typedef struct DeterministicSpriteGroupRange {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    76
	SpriteGroup *group;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    77
	uint32 low;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    78
	uint32 high;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    79
} DeterministicSpriteGroupRange;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    80
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    81
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    82
typedef struct DeterministicSpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    83
	VarSpriteGroupScope var_scope;
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    84
	DeterministicSpriteGroupSize size;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    85
	byte num_adjusts;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    86
	byte num_ranges;
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    87
	DeterministicSpriteGroupAdjust *adjusts;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    88
	DeterministicSpriteGroupRange *ranges; // Dynamically allocated
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    89
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    90
	// Dynamically allocated, this is the sole owner
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    91
	SpriteGroup *default_group;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    92
} DeterministicSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    93
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    94
typedef enum RandomizedSpriteGroupCompareModes {
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    95
	RSG_CMP_ANY,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    96
	RSG_CMP_ALL,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    97
} RandomizedSpriteGroupCompareMode;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    98
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    99
typedef struct RandomizedSpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   100
	// Take this object:
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   101
	VarSpriteGroupScope var_scope;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   102
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   103
	// Check for these triggers:
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   104
	RandomizedSpriteGroupCompareMode cmp_mode;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   105
	byte triggers;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   106
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   107
	// Look for this in the per-object randomized bitmask:
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   108
	byte lowest_randbit;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   109
	byte num_groups; // must be power of 2
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   110
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   111
	// Take the group with appropriate index:
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   112
	SpriteGroup **groups;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   113
} RandomizedSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   114
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   115
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   116
/* This contains a callback result. A failed callback has a value of
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   117
 * CALLBACK_FAILED */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   118
typedef struct CallbackResultSpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   119
	uint16 result;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   120
} CallbackResultSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   121
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   122
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   123
/* A result sprite group returns the first SpriteID and the number of
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   124
 * sprites in the set */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   125
typedef struct ResultSpriteGroup {
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   126
	SpriteID sprite;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   127
	byte num_sprites;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   128
} ResultSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   129
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   130
/* List of different sprite group types */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   131
typedef enum SpriteGroupType {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   132
	SGT_INVALID,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   133
	SGT_REAL,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   134
	SGT_DETERMINISTIC,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   135
	SGT_RANDOMIZED,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   136
	SGT_CALLBACK,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   137
	SGT_RESULT,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   138
} SpriteGroupType;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   139
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   140
/* Common wrapper for all the different sprite group types */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   141
struct SpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   142
	SpriteGroupType type;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   143
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   144
	union {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   145
		RealSpriteGroup real;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   146
		DeterministicSpriteGroup determ;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   147
		RandomizedSpriteGroup random;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   148
		CallbackResultSpriteGroup callback;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   149
		ResultSpriteGroup result;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   150
	} g;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   151
};
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   152
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   153
3595
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
   154
SpriteGroup *AllocateSpriteGroup(void);
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
   155
void InitializeSpriteGroupPool(void);
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
   156
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   157
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   158
typedef struct ResolverObject {
3724
1b2d907fbd33 (svn r4697) - NewGRF: callback IDs can now be 16 bit values.
peter1138
parents: 3720
diff changeset
   159
	uint16 callback;
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   160
	uint32 callback_param1;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   161
	uint32 callback_param2;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   162
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   163
	byte trigger;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   164
	uint32 last_value;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   165
	uint32 reseed;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   166
	VarSpriteGroupScope scope;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   167
4056
7899dc230a12 (svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents: 3893
diff changeset
   168
	bool info_view; ///< Indicates if the item is being drawn in an info window
7899dc230a12 (svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents: 3893
diff changeset
   169
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   170
	union {
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   171
		struct {
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   172
			const struct Vehicle *self;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   173
			const struct Vehicle *parent;
4057
863fce30596d (svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents: 4056
diff changeset
   174
			EngineID self_type;
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   175
		} vehicle;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   176
		struct {
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   177
			TileIndex tile;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   178
			const struct Station *st;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   179
			const struct StationSpec *statspec;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   180
		} station;
3720
8a82d64ea485 (svn r4691) - Codechange: don't use unnamed unions as GCC 2.95.ancient won't compile it. Needed for our MorphOS user ;)
peter1138
parents: 3677
diff changeset
   181
	} u;
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   182
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   183
	uint32 (*GetRandomBits)(const struct ResolverObject*);
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   184
	uint32 (*GetTriggers)(const struct ResolverObject*);
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   185
	void (*SetTriggers)(const struct ResolverObject*, int);
3893
ced26054ee00 (svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
peter1138
parents: 3734
diff changeset
   186
	uint32 (*GetVariable)(const struct ResolverObject*, byte, byte, bool*);
3734
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3724
diff changeset
   187
	const SpriteGroup *(*ResolveReal)(const struct ResolverObject*, const SpriteGroup*);
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   188
} ResolverObject;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   189
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   190
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   191
/* Base sprite group resolver */
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   192
const SpriteGroup *Resolve(const SpriteGroup *group, ResolverObject *object);
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   193
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   194
3595
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
   195
#endif /* NEWGRF_SPRITEGROUP_H */