From 05d7d046c71943317d31c2e3c22a960faf38f6f1 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Fri, 3 Feb 2006 23:02:01 +0000 Subject: (svn r3530) - NewGRF: Move station resolver to newgrf_station --- station_cmd.c | 82 ----------------------------------------------------------- 1 file changed, 82 deletions(-) (limited to 'station_cmd.c') diff --git a/station_cmd.c b/station_cmd.c index 84d553db0..942a93cdc 100644 --- a/station_cmd.c +++ b/station_cmd.c @@ -1196,88 +1196,6 @@ uint GetStationPlatforms(const Station *st, TileIndex tile) return len - 1; } -static const RealSpriteGroup *ResolveStationSpriteGroup(const SpriteGroup *spg, const Station *st) -{ - switch (spg->type) { - case SGT_REAL: - return &spg->g.real; - - case SGT_DETERMINISTIC: { - const DeterministicSpriteGroup *dsg = &spg->g.determ; - SpriteGroup *target; - int value = -1; - - if ((dsg->variable >> 6) == 0) { - /* General property */ - value = GetDeterministicSpriteValue(dsg->variable); - } else { - if (st == NULL) { - /* We are in a build dialog of something, - * and we are checking for something undefined. - * That means we should get the first target - * (NOT the default one). */ - if (dsg->num_ranges > 0) { - target = dsg->ranges[0].group; - } else { - target = dsg->default_group; - } - return ResolveStationSpriteGroup(target, NULL); - } - - /* Station-specific property. */ - if (dsg->var_scope == VSG_SCOPE_PARENT) { - /* TODO: Town structure. */ - - } else /* VSG_SELF */ { - if (dsg->variable == 0x40 || dsg->variable == 0x41) { - /* FIXME: This is ad hoc only - * for waypoints. */ - value = 0x01010000; - } else { - /* TODO: Only small fraction done. */ - // TTDPatch runs on little-endian arch; - // Variable is 0x70 + offset in the TTD's station structure - switch (dsg->variable - 0x70) { - case 0x80: value = st->facilities; break; - case 0x81: value = st->airport_type; break; - case 0x82: value = st->truck_stops->status; break; - case 0x83: value = st->bus_stops->status; break; - case 0x86: value = st->airport_flags & 0xFFFF; break; - case 0x87: value = st->airport_flags & 0xFF; break; - case 0x8A: value = st->build_date; break; - } - } - } - } - - target = value != -1 ? EvalDeterministicSpriteGroup(dsg, value) : dsg->default_group; - return ResolveStationSpriteGroup(target, st); - } - - default: - case SGT_RANDOMIZED: - error("I don't know how to handle random spritegroups yet!"); - return NULL; - } -} - -uint32 GetCustomStationRelocation(const StationSpec *spec, const Station *st, byte ctype) -{ - const RealSpriteGroup *rsg = ResolveStationSpriteGroup(spec->spritegroup[ctype], st); - - if (rsg->sprites_per_set != 0) { - if (rsg->loading_count != 0) return rsg->loading[0]->g.result.result; - if (rsg->loaded_count != 0) return rsg->loaded[0]->g.result.result; - } - - error("Custom station 0x%08x::0x%02x has no sprites associated.", - spec->grfid, spec->localidx); - /* This is what gets subscribed of dtss->image in newgrf.c, - * so it's probably kinda "default offset". Try to use it as - * emergency measure. */ - return SPR_RAIL_PLATFORM_Y_FRONT; -} - static int32 RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags) { int w,h; -- cgit v1.2.3-54-g00ecf