@ -1240,6 +1240,11 @@ static void NewSpriteGroup(byte *buf, int len)
numloaded = buf [ 3 ] ;
numloaded = buf [ 3 ] ;
numloading = buf [ 4 ] ;
numloading = buf [ 4 ] ;
if ( setid > = _cur_grffile - > spritegroups_count ) {
_cur_grffile - > spritegroups_count = setid + 1 ;
_cur_grffile - > spritegroups = realloc ( _cur_grffile - > spritegroups , _cur_grffile - > spritegroups_count * sizeof ( * _cur_grffile - > spritegroups ) ) ;
}
if ( numloaded = = 0x81 | | numloaded = = 0x82 ) {
if ( numloaded = = 0x81 | | numloaded = = 0x82 ) {
DeterministicSpriteGroup * dg ;
DeterministicSpriteGroup * dg ;
uint16 groupid ;
uint16 groupid ;
@ -1253,13 +1258,7 @@ static void NewSpriteGroup(byte *buf, int len)
buf + = 4 ; len - = 4 ;
buf + = 4 ; len - = 4 ;
check_length ( len , 6 , " NewSpriteGroup 0x81/0x82 " ) ;
check_length ( len , 6 , " NewSpriteGroup 0x81/0x82 " ) ;
if ( setid > = _cur_grffile - > spritegroups_count ) {
group = calloc ( 1 , sizeof ( * group ) ) ;
_cur_grffile - > spritegroups_count = setid + 1 ;
_cur_grffile - > spritegroups = realloc ( _cur_grffile - > spritegroups , _cur_grffile - > spritegroups_count * sizeof ( * _cur_grffile - > spritegroups ) ) ;
}
group = & _cur_grffile - > spritegroups [ setid ] ;
memset ( group , 0 , sizeof ( * group ) ) ;
group - > type = SGT_DETERMINISTIC ;
group - > type = SGT_DETERMINISTIC ;
dg = & group - > g . determ ;
dg = & group - > g . determ ;
@ -1295,7 +1294,7 @@ static void NewSpriteGroup(byte *buf, int len)
} else {
} else {
/* XXX: If multiple surreal sets attach a surreal
/* XXX: If multiple surreal sets attach a surreal
* set this way , we are in trouble . */
* set this way , we are in trouble . */
dg - > ranges [ i ] . group = _cur_grffile - > spritegroups [ groupid ] ;
dg - > ranges [ i ] . group = * _cur_grffile - > spritegroups [ groupid ] ;
}
}
dg - > ranges [ i ] . low = grf_load_byte ( & buf ) ;
dg - > ranges [ i ] . low = grf_load_byte ( & buf ) ;
@ -1313,9 +1312,10 @@ static void NewSpriteGroup(byte *buf, int len)
return ;
return ;
} else {
} else {
dg - > default_group = malloc ( sizeof ( * dg - > default_group ) ) ;
dg - > default_group = malloc ( sizeof ( * dg - > default_group ) ) ;
memcpy ( dg - > default_group , & _cur_grffile - > spritegroups [ groupid ] , sizeof ( * dg - > default_group ) ) ;
memcpy ( dg - > default_group , _cur_grffile - > spritegroups [ groupid ] , sizeof ( * dg - > default_group ) ) ;
}
}
_cur_grffile - > spritegroups [ setid ] = group ;
return ;
return ;
} else if ( numloaded = = 0x80 | | numloaded = = 0x83 ) {
} else if ( numloaded = = 0x80 | | numloaded = = 0x83 ) {
@ -1329,13 +1329,7 @@ static void NewSpriteGroup(byte *buf, int len)
len - = 4 ;
len - = 4 ;
check_length ( len , 6 , " NewSpriteGroup 0x80/0x83 " ) ;
check_length ( len , 6 , " NewSpriteGroup 0x80/0x83 " ) ;
if ( setid > = _cur_grffile - > spritegroups_count ) {
group = calloc ( 1 , sizeof ( * group ) ) ;
_cur_grffile - > spritegroups_count = setid + 1 ;
_cur_grffile - > spritegroups = realloc ( _cur_grffile - > spritegroups , _cur_grffile - > spritegroups_count * sizeof ( * _cur_grffile - > spritegroups ) ) ;
}
group = & _cur_grffile - > spritegroups [ setid ] ;
memset ( group , 0 , sizeof ( * group ) ) ;
group - > type = SGT_RANDOMIZED ;
group - > type = SGT_RANDOMIZED ;
rg = & group - > g . random ;
rg = & group - > g . random ;
@ -1364,9 +1358,10 @@ static void NewSpriteGroup(byte *buf, int len)
}
}
/* XXX: If multiple surreal sets attach a surreal
/* XXX: If multiple surreal sets attach a surreal
* set this way , we are in trouble . */
* set this way , we are in trouble . */
rg - > groups [ i ] = _cur_grffile - > spritegroups [ groupid ] ;
rg - > groups [ i ] = * _cur_grffile - > spritegroups [ groupid ] ;
}
}
_cur_grffile - > spritegroups [ setid ] = group ;
return ;
return ;
}
}
@ -1395,12 +1390,7 @@ static void NewSpriteGroup(byte *buf, int len)
numloading = 16 ;
numloading = 16 ;
}
}
if ( setid > = _cur_grffile - > spritegroups_count ) {
group = calloc ( 1 , sizeof ( * group ) ) ;
_cur_grffile - > spritegroups_count = setid + 1 ;
_cur_grffile - > spritegroups = realloc ( _cur_grffile - > spritegroups , _cur_grffile - > spritegroups_count * sizeof ( * _cur_grffile - > spritegroups ) ) ;
}
group = & _cur_grffile - > spritegroups [ setid ] ;
memset ( group , 0 , sizeof ( * group ) ) ;
group - > type = SGT_REAL ;
group - > type = SGT_REAL ;
rg = & group - > g . real ;
rg = & group - > g . real ;
@ -1424,6 +1414,8 @@ static void NewSpriteGroup(byte *buf, int len)
rg - > loading [ i ] = _cur_grffile - > spriteset_start + spriteset_id * _cur_grffile - > spriteset_numents ;
rg - > loading [ i ] = _cur_grffile - > spriteset_start + spriteset_id * _cur_grffile - > spriteset_numents ;
DEBUG ( grf , 8 ) ( " NewSpriteGroup: + rg->loading[%i] = %u (subset %u) " , i , rg - > loading [ i ] , spriteset_id ) ;
DEBUG ( grf , 8 ) ( " NewSpriteGroup: + rg->loading[%i] = %u (subset %u) " , i , rg - > loading [ i ] , spriteset_id ) ;
}
}
_cur_grffile - > spritegroups [ setid ] = group ;
}
}
/* Action 0x03 */
/* Action 0x03 */
@ -1494,7 +1486,7 @@ static void NewVehicle_SpriteGroupMapping(byte *buf, int len)
continue ;
continue ;
}
}
stat - > spritegroup [ 1 ] = _cur_grffile - > spritegroups [ groupid ] ;
stat - > spritegroup [ 1 ] = * _cur_grffile - > spritegroups [ groupid ] ;
}
}
}
}
@ -1512,7 +1504,7 @@ static void NewVehicle_SpriteGroupMapping(byte *buf, int len)
uint8 stid = buf [ 3 + i ] ;
uint8 stid = buf [ 3 + i ] ;
StationSpec * stat = & _cur_grffile - > stations [ stid ] ;
StationSpec * stat = & _cur_grffile - > stations [ stid ] ;
stat - > spritegroup [ 0 ] = _cur_grffile - > spritegroups [ groupid ] ;
stat - > spritegroup [ 0 ] = * _cur_grffile - > spritegroups [ groupid ] ;
stat - > grfid = _cur_grffile - > grfid ;
stat - > grfid = _cur_grffile - > grfid ;
SetCustomStation ( stid , stat ) ;
SetCustomStation ( stid , stat ) ;
stat - > sclass = STAT_CLASS_NONE ;
stat - > sclass = STAT_CLASS_NONE ;
@ -1582,9 +1574,9 @@ static void NewVehicle_SpriteGroupMapping(byte *buf, int len)
if ( wagover ) {
if ( wagover ) {
// TODO: No multiple cargo types per vehicle yet. --pasky
// TODO: No multiple cargo types per vehicle yet. --pasky
SetWagonOverrideSprites ( engine , & _cur_grffile - > spritegroups [ groupid ] , last_engines , last_engines_count ) ;
SetWagonOverrideSprites ( engine , _cur_grffile - > spritegroups [ groupid ] , last_engines , last_engines_count ) ;
} else {
} else {
SetCustomEngineSprites ( engine , ctype , & _cur_grffile - > spritegroups [ groupid ] ) ;
SetCustomEngineSprites ( engine , ctype , _cur_grffile - > spritegroups [ groupid ] ) ;
last_engines [ i ] = engine ;
last_engines [ i ] = engine ;
}
}
}
}
@ -1607,9 +1599,9 @@ static void NewVehicle_SpriteGroupMapping(byte *buf, int len)
if ( wagover ) {
if ( wagover ) {
// TODO: No multiple cargo types per vehicle yet. --pasky
// TODO: No multiple cargo types per vehicle yet. --pasky
SetWagonOverrideSprites ( engine , & _cur_grffile - > spritegroups [ groupid ] , last_engines , last_engines_count ) ;
SetWagonOverrideSprites ( engine , _cur_grffile - > spritegroups [ groupid ] , last_engines , last_engines_count ) ;
} else {
} else {
SetCustomEngineSprites ( engine , GC_DEFAULT , & _cur_grffile - > spritegroups [ groupid ] ) ;
SetCustomEngineSprites ( engine , GC_DEFAULT , _cur_grffile - > spritegroups [ groupid ] ) ;
last_engines [ i ] = engine ;
last_engines [ i ] = engine ;
}
}
}
}