From ec434b208e6e67f98f7795f1a9d6154df888c6b2 Mon Sep 17 00:00:00 2001 From: darkvater Date: Sun, 14 Nov 2004 20:50:38 +0000 Subject: (svn r610) -newgrf: Support for some basic deterministical spritegroups regarding stations. Waypoints look changes based on year now :^) (pasky). --- sprite.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 sprite.c (limited to 'sprite.c') diff --git a/sprite.c b/sprite.c new file mode 100644 index 000000000..f0a130d4e --- /dev/null +++ b/sprite.c @@ -0,0 +1,62 @@ +#include "stdafx.h" + +#include + +#include "ttd.h" +#include "sprite.h" + + +struct SpriteGroup *EvalDeterministicSpriteGroup(struct DeterministicSpriteGroup *dsg, int value) +{ + int i; + + value >>= dsg->shift_num; // This should bring us to the byte range. + value &= dsg->and_mask; + + if (dsg->operation != DSG_OP_NONE) + value += (signed char) dsg->add_val; + + switch (dsg->operation) { + case DSG_OP_DIV: + value /= (signed char) dsg->divmod_val; + break; + case DSG_OP_MOD: + value %= (signed char) dsg->divmod_val; + break; + case DSG_OP_NONE: + break; + } + + for (i = 0; i < dsg->num_ranges; i++) { + struct DeterministicSpriteGroupRange *range = &dsg->ranges[i]; + + if (range->low <= value && value <= range->high) + return &range->group; + } + + return dsg->default_group; +} + +int GetDeterministicSpriteValue(byte var) +{ + switch (var) { + case 0x00: + return _date; + case 0x01: + return _cur_year; + case 0x02: + return _cur_month; + case 0x03: + return _opt.landscape; + case 0x09: + return _date_fract; + case 0x0A: + return _tick_counter; + case 0x0C: + /* If we got here, it means there was no callback or + * callbacks aren't supported on our callpath. */ + return 0; + default: + return -1; + } +} -- cgit v1.2.3-54-g00ecf