summaryrefslogtreecommitdiff
path: root/sprite.c
diff options
context:
space:
mode:
authordarkvater <darkvater@openttd.org>2004-11-14 20:50:38 +0000
committerdarkvater <darkvater@openttd.org>2004-11-14 20:50:38 +0000
commitec434b208e6e67f98f7795f1a9d6154df888c6b2 (patch)
treeb22ee0fd86834db94fcab89aec21e066ec29e70e /sprite.c
parentc2193ce1a8f1e9acdada4675222d290fcf6640b7 (diff)
downloadopenttd-ec434b208e6e67f98f7795f1a9d6154df888c6b2.tar.xz
(svn r610) -newgrf: Support for some basic deterministical spritegroups regarding stations. Waypoints look changes based on year now :^) (pasky).
Diffstat (limited to 'sprite.c')
-rw-r--r--sprite.c62
1 files changed, 62 insertions, 0 deletions
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 <stdarg.h>
+
+#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;
+ }
+}