(svn r1868) Improve readability of the bulldozer movement code
authortron
Sun, 13 Feb 2005 11:27:41 +0000
changeset 1364 238934514bfd
parent 1363 775a7ee52369
child 1365 3ec3ff0adc01
(svn r1868) Improve readability of the bulldozer movement code
table/sprites.h
vehicle.c
--- a/table/sprites.h	Sun Feb 13 11:18:02 2005 +0000
+++ b/table/sprites.h	Sun Feb 13 11:27:41 2005 +0000
@@ -727,6 +727,12 @@
 	SPR_TYCOON_IMG1_BEGIN     = 4814,
 	SPR_TYCOON_IMG2_BEGIN     = 4824,
 
+	/* Effect vehciles */
+	SPR_BULLDOZER_NE = 1416,
+	SPR_BULLDOZER_SE = 1417,
+	SPR_BULLDOZER_SW = 1418,
+	SPR_BULLDOZER_NW = 1419,
+
 	/* road_gui.c */
 	SPR_IMG_ROAD_NW				= 1309,
 	SPR_IMG_ROAD_NE				= 1310,
--- a/vehicle.c	Sun Feb 13 11:18:02 2005 +0000
+++ b/vehicle.c	Sun Feb 13 11:27:41 2005 +0000
@@ -1,6 +1,7 @@
 #include "stdafx.h"
 #include "ttd.h"
 #include "spritecache.h"
+#include "table/sprites.h"
 #include "table/strings.h"
 #include "map.h"
 #include "tile.h"
@@ -778,66 +779,70 @@
 	}
 }
 
-static void EffectInit_8(Vehicle *v)
+static void BulldozerInit(Vehicle *v)
 {
-	v->cur_image = 1416;
+	v->cur_image = SPR_BULLDOZER_NE;
 	v->progress = 0;
 	v->u.special.unk0 = 0;
 	v->u.special.unk2 = 0;
 }
 
-#define MK(imag,dir,dur) (imag<<6)+(dir<<4)+dur
-static const byte _effecttick8_data[] = {
-	MK(0,0,4),
-	MK(3,3,4),
-	MK(2,2,7),
-	MK(0,2,7),
-	MK(1,1,3),
-	MK(2,2,7),
-	MK(0,2,7),
-	MK(1,1,3),
-	MK(2,2,7),
-	MK(0,2,7),
-	MK(3,3,6),
-	MK(2,2,6),
-	MK(1,1,7),
-	MK(3,1,7),
-	MK(0,0,3),
-	MK(1,1,7),
-	MK(3,1,7),
-	MK(0,0,3),
-	MK(1,1,7),
-	MK(3,1,7),
-	255
-};
-#undef MK
+typedef struct BulldozerMovement {
+	byte image:2;
+	byte direction:2;
+	byte duration:3;
+} BulldozerMovement;
 
-static const int8 _xy_inc_by_dir[5] = {
-	-1, 0, 1, 0, -1,
+static const BulldozerMovement _bulldozer_movement[] = {
+	{ 0, 0, 4 },
+	{ 3, 3, 4 },
+	{ 2, 2, 7 },
+	{ 0, 2, 7 },
+	{ 1, 1, 3 },
+	{ 2, 2, 7 },
+	{ 0, 2, 7 },
+	{ 1, 1, 3 },
+	{ 2, 2, 7 },
+	{ 0, 2, 7 },
+	{ 3, 3, 6 },
+	{ 2, 2, 6 },
+	{ 1, 1, 7 },
+	{ 3, 1, 7 },
+	{ 0, 0, 3 },
+	{ 1, 1, 7 },
+	{ 3, 1, 7 },
+	{ 0, 0, 3 },
+	{ 1, 1, 7 },
+	{ 3, 1, 7 }
 };
 
-#define GET_X_INC_BY_DIR(d) _xy_inc_by_dir[d]
-#define GET_Y_INC_BY_DIR(d) _xy_inc_by_dir[(d)+1]
+static const struct {
+	int8 x;
+	int8 y;
+} _inc_by_dir[] = {
+	{ -1,  0 },
+	{  0,  1 },
+	{  1,  0 },
+	{  0, -1 }
+};
 
-static void EffectTick_8(Vehicle *v)
+static void BulldozerTick(Vehicle *v)
 {
-	byte b;
+	if ((++v->progress & 7) == 0) {
+		const BulldozerMovement* b = &_bulldozer_movement[v->u.special.unk0];
 
-	if (!(++v->progress & 7)) {
-		v->u.special.unk2++;
 		BeginVehicleMove(v);
 
-		b = _effecttick8_data[v->u.special.unk0];
-
-		v->cur_image = 0x588 + (b>>6);
+		v->cur_image = SPR_BULLDOZER_NE + b->image;
 
-		v->x_pos += GET_X_INC_BY_DIR((b>>4)&3);
-		v->y_pos += GET_X_INC_BY_DIR((b>>4)&3);
+		v->x_pos += _inc_by_dir[b->direction].x;
+		v->y_pos += _inc_by_dir[b->direction].y;
 
-		if (v->u.special.unk2 < (b & 7)) {
+		v->u.special.unk2++;
+		if (v->u.special.unk2 < b->duration) {
 			v->u.special.unk2 = 0;
 			v->u.special.unk0++;
-			if (_effecttick8_data[v->u.special.unk0] == 0xFF) {
+			if (v->u.special.unk0 == lengthof(_bulldozer_movement)) {
 				EndVehicleMove(v);
 				DeleteVehicle(v);
 				return;
@@ -1086,7 +1091,7 @@
 	EffectInit_5,
 	EffectInit_6,
 	EffectInit_7,
-	EffectInit_8,
+	BulldozerInit,
 	EffectInit_9,
 };
 
@@ -1099,7 +1104,7 @@
 	EffectTick_5,
 	EffectTick_6,
 	EffectTick_7,
-	EffectTick_8,
+	BulldozerTick,
 	EffectTick_9,
 };