(svn r4767) - Newstations: fix loading / use of custom ground sprites

This commit is contained in:
peter1138
2006-05-07 10:58:53 +00:00
parent 24854be59e
commit 31a54a6835
6 changed files with 77 additions and 41 deletions

View File

@@ -465,7 +465,33 @@ SpriteID GetCustomStationRelocation(const StationSpec *statspec, const Station *
if (group == NULL || group->type != SGT_RESULT) return 0;
return group->g.result.sprite;
return group->g.result.sprite - 0x42D;
}
SpriteID GetCustomStationGroundRelocation(const StationSpec *statspec, const Station *st, TileIndex tile)
{
const SpriteGroup *group;
ResolverObject object;
CargoID ctype = (st == NULL) ? GC_PURCHASE : GC_DEFAULT_NA;
NewStationResolver(&object, statspec, st, tile);
object.callback_param1 = 1; /* Indicate we are resolving the ground sprite */
group = Resolve(statspec->spritegroup[ctype], &object);
if ((group == NULL || group->type != SGT_RESULT) && ctype != GC_DEFAULT_NA) {
group = Resolve(statspec->spritegroup[GC_DEFAULT_NA], &object);
}
if ((group == NULL || group->type != SGT_RESULT) && ctype != GC_DEFAULT) {
group = Resolve(statspec->spritegroup[GC_DEFAULT], &object);
}
if ((group == NULL || group->type != SGT_RESULT)) {
group = Resolve(statspec->groundgroup, &object);
}
if (group == NULL || group->type != SGT_RESULT) return 0;
return group->g.result.sprite - 0x42D;
}
@@ -593,8 +619,6 @@ bool DeallocateSpecFromStation(Station *st, byte specindex)
*/
bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station)
{
extern uint16 _custom_sprites_base;
const StationSpec *statspec;
const DrawTileSprites *sprites;
const DrawTileSeqStruct *seq;
@@ -616,20 +640,31 @@ bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID
if (statspec->renderdata == NULL) {
sprites = GetStationTileLayout(tile + axis);
relocation -= 0x42D;
} else {
sprites = &statspec->renderdata[(tile < statspec->tiles) ? tile + axis : axis];
}
image = sprites->ground_sprite;
image += (image < _custom_sprites_base) ? rti->total_offset : rti->custom_ground_offset;
if (HASBIT(image, 31)) {
CLRBIT(image, 31);
image += GetCustomStationGroundRelocation(statspec, NULL, INVALID_TILE);
image += rti->custom_ground_offset;
} else {
image += rti->total_offset;
}
if (image & PALETTE_MODIFIER_COLOR) image &= SPRITE_MASK;
DrawSprite(image, x, y);
foreach_draw_tile_seq(seq, sprites->seq) {
Point pt;
image = seq->image + relocation;
image = seq->image;
if (HASBIT(image, 30)) {
CLRBIT(image, 30);
image += rti->total_offset;
} else {
image += relocation;
}
if ((byte)seq->delta_z != 0x80) {
pt = RemapCoords(seq->delta_x, seq->delta_y, seq->delta_z);