grfspecial.c
changeset 360 ff657281ae48
parent 359 f0ee94d705ed
child 361 ad7a042ee0eb
--- a/grfspecial.c	Fri Nov 12 17:27:30 2004 +0000
+++ b/grfspecial.c	Fri Nov 12 18:43:12 2004 +0000
@@ -87,9 +87,9 @@
 }
 
 
-typedef int (*VCI_Handler)(uint engine, int numinfo, int prop, byte **buf, int len);
+typedef bool (*VCI_Handler)(uint engine, int numinfo, int prop, byte **buf, int len);
 
-#define foreach_engine for (i = 0; i < numinfo; i++)
+#define FOR_EACH_ENGINE for (i = 0; i < numinfo; i++)
 
 static void dewagonize(int condition, int engine)
 {
@@ -105,98 +105,83 @@
 	}
 }
 
-static int RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
+static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
 {
 	EngineInfo *ei = &_engine_info[engine];
 	RailVehicleInfo *rvi = &_rail_vehicle_info[engine];
 	byte *buf = *bufp;
 	int i;
-	int ret = 0;
+	bool ret = false;
 
 	switch (prop) {
-		case 0x05:
-		{	/* Track type */
-			foreach_engine {
+		case 0x05: {	/* Track type */
+			FOR_EACH_ENGINE {
 				uint8 tracktype = grf_load_byte(&buf);
 
 				ei[i].railtype_climates &= 0xf;
 				ei[i].railtype_climates |= tracktype << 4;
 			}
-			break;
-		}
-		case 0x08:
-		{	/* AI passenger service */
+		}	break;
+		case 0x08: {	/* AI passenger service */
 			/* TODO */
-			foreach_engine {
+			FOR_EACH_ENGINE {
 				grf_load_byte(&buf);
 			}
-			ret = 1;
-			break;
-		}
-		case 0x09:
-		{	/* Speed */
-			foreach_engine {
+			ret = true;
+		}	break;
+		case 0x09: {	/* Speed */
+			FOR_EACH_ENGINE {
 				uint16 speed = grf_load_word(&buf);
 
 				rvi[i].max_speed = speed;
 				dewagonize(speed, engine + i);
 			}
-			break;
-		}
-		case 0x0b:
-		{	/* Power */
-			foreach_engine {
+		}	break;
+		case 0x0B: {	/* Power */
+			FOR_EACH_ENGINE {
 				uint16 power = grf_load_word(&buf);
 
 				rvi[i].power = power;
 				dewagonize(power, engine + i);
 			}
-			break;
-		}
-		case 0x0d:
-		{	/* Running cost factor */
-			foreach_engine {
+		}	break;
+		case 0x0D: {	/* Running cost factor */
+			FOR_EACH_ENGINE {
 				uint8 runcostfact = grf_load_byte(&buf);
 
 				rvi[i].running_cost_base = runcostfact;
 				dewagonize(runcostfact, engine + i);
 			}
-			break;
-		}
-		case 0x0e:
-		{	/* Running cost base */
-			foreach_engine {
+		}	break;
+		case 0x0E: {	/* Running cost base */
+			FOR_EACH_ENGINE {
 				uint32 base = grf_load_dword(&buf);
 
 				switch (base) {
-				case 0x4c30:
+				case 0x4C30:
 					rvi[i].engclass = 0;
 					break;
-				case 0x4c36:
+				case 0x4C36:
 					rvi[i].engclass = 1;
 					break;
-				case 0x4c3c:
+				case 0x4C3C:
 					rvi[i].engclass = 2;
 					break;
 				}
 				dewagonize(base, engine + i);
 			}
-			break;
-		}
-		case 0x12:
-		{	/* Sprite ID */
-			foreach_engine {
+		}	break;
+		case 0x12: {	/* Sprite ID */
+			FOR_EACH_ENGINE {
 				uint8 spriteid = grf_load_byte(&buf);
 
-				if (spriteid == 0xfd && rvi[i].image_index != 0xfd)
+				if (spriteid == 0xFD && rvi[i].image_index != 0xFD)
 					_engine_original_sprites[engine + i] = rvi[i].image_index;
 				rvi[i].image_index = spriteid;
 			}
-			break;
-		}
-		case 0x13:
-		{	/* Dual-headed */
-			foreach_engine {
+		}	break;
+		case 0x13: {	/* Dual-headed */
+			FOR_EACH_ENGINE {
 				uint8 dual = grf_load_byte(&buf);
 
 				if (dual) {
@@ -205,58 +190,46 @@
 					rvi[i].flags &= ~1;
 				}
 			}
-			break;
-		}
-		case 0x14:
-		{	/* Cargo capacity */
-			foreach_engine {
+		}	break;
+		case 0x14: {	/* Cargo capacity */
+			FOR_EACH_ENGINE {
 				uint8 capacity = grf_load_byte(&buf);
 
 				rvi[i].capacity = capacity;
 			}
-			break;
-		}
-		case 0x15:
-		{	/* Cargo type */
-			foreach_engine {
+		}	break;
+		case 0x15: {	/* Cargo type */
+			FOR_EACH_ENGINE {
 				uint8 ctype = grf_load_byte(&buf);
 
 				rvi[i].cargo_type = ctype;
 			}
-			break;
-		}
-		case 0x16:
-		{	/* Weight */
-			foreach_engine {
+		}	break;
+		case 0x16: {	/* Weight */
+			FOR_EACH_ENGINE {
 				uint8 weight = grf_load_byte(&buf);
 
 				rvi[i].weight = weight;
 			}
-			break;
-		}
-		case 0x17:
-		{	/* Cost factor */
-			foreach_engine {
+		}	break;
+		case 0x17: {	/* Cost factor */
+			FOR_EACH_ENGINE {
 				uint8 cfactor = grf_load_byte(&buf);
 
 				rvi[i].base_cost = cfactor;
 			}
-			break;
-		}
-		case 0x18:
-		{	/* AI rank */
+		}	break;
+		case 0x18: {	/* AI rank */
 			/* TODO: _railveh_score should be merged to _rail_vehicle_info. */
-			foreach_engine {
+			FOR_EACH_ENGINE {
 				grf_load_byte(&buf);
 			}
-			ret = 1;
-			break;
-		}
-		case 0x19:
-		{	/* Engine traction type */
+			ret = true;
+		}	break;
+		case 0x19: { /* Engine traction type */
 			/* TODO: What do the individual numbers mean?
 			 * XXX: And in what base are they, in fact? --pasky */
-			foreach_engine {
+			FOR_EACH_ENGINE {
 				uint8 traction = grf_load_byte(&buf);
 				int engclass;
 
@@ -271,100 +244,87 @@
 
 				rvi[i].engclass = engclass;
 			}
-			break;
-		}
+		}	break;
+
 		/* TODO */
 		/* Fall-through for unimplemented four bytes long properties. */
-		case 0x1d:	/* Refit cargo */
-			foreach_engine {
+		case 0x1D:	/* Refit cargo */
+			FOR_EACH_ENGINE {
 				grf_load_word(&buf);
 			}
 		/* Fall-through for unimplemented two bytes long properties. */
-		case 0x1b:	/* Powered wagons power bonus */
-			foreach_engine {
+		case 0x1B:	/* Powered wagons power bonus */
+			FOR_EACH_ENGINE {
 				grf_load_byte(&buf);
 			}
 		/* Fall-through for unimplemented one byte long properties. */
-		case 0x1a:	/* Sort order */
-		case 0x1c:	/* Refit cost */
-		case 0x1e:	/* Callback */
-		case 0x1f:	/* Tractive effort */
+		case 0x1A:	/* Sort order */
+		case 0x1C:	/* Refit cost */
+		case 0x1E:	/* Callback */
+		case 0x1F:	/* Tractive effort */
 		case 0x21:	/* Shorter tenders */
 		case 0x22:	/* Visual */
-		case 0x23:	/* Powered wagons weight bonus */
+		case 0x23: {/* Powered wagons weight bonus */
 			/* TODO */
-			foreach_engine {
+			FOR_EACH_ENGINE {
 				grf_load_byte(&buf);
 			}
-			ret = 1;
-			break;
+			ret = true;
+		}	break;
 		default:
-			ret = 1;
-			break;
+			ret = true;
 	}
 	*bufp = buf;
 	return ret;
 }
 
-static int ShipVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
+static bool ShipVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
 {
 	ShipVehicleInfo *svi = &_ship_vehicle_info[engine];
 	byte *buf = *bufp;
 	int i;
-	int ret = 0;
+	bool ret = false;
 
 	//printf("e %x prop %x?\n", engine, prop);
 	switch (prop) {
-		case 0x08:
-		{	/* Sprite ID */
-			foreach_engine {
+		case 0x08: {	/* Sprite ID */
+			FOR_EACH_ENGINE {
 				uint8 spriteid = grf_load_byte(&buf);
 
-				if (spriteid == 0xff)
-					spriteid = 0xfd; // ships have different custom id in the GRF file
+				if (spriteid == 0xFF)
+					spriteid = 0xFD; // ships have different custom id in the GRF file
 
 				// This is currently not used but there's no reason
 				// in not having it here for the future.
-				if (spriteid == 0xfd
-				    && svi[i].image_index != 0xfd)
-					_engine_original_sprites[SHIP_ENGINES_INDEX
-					                         + engine + i]
-						= svi[i].image_index;
+				if (spriteid == 0xFD && svi[i].image_index != 0xFD)
+					_engine_original_sprites[SHIP_ENGINES_INDEX + engine + i] = svi[i].image_index;
+
 				svi[i].image_index = spriteid;
 			}
-			break;
-		}
-		case 0x09:
-		{	/* Refittable */
-			foreach_engine {
+		}	break;
+		case 0x09: {	/* Refittable */
+			FOR_EACH_ENGINE {
 				uint8 refittable = grf_load_byte(&buf);
 
 				svi[i].refittable = refittable;
 			}
-			break;
-		}
-		case 0x0a:
-		{	/* Cost factor */
-			foreach_engine {
+		}	break;
+		case 0x0A: {	/* Cost factor */
+			FOR_EACH_ENGINE {
 				uint8 cost_factor = grf_load_byte(&buf);
 
 				svi[i].base_cost = cost_factor; // ?? is it base_cost?
 			}
-			break;
-		}
-		case 0x0b:
-		{	/* Speed */
-			foreach_engine {
+		}	break;
+		case 0x0B: {	/* Speed */
+			FOR_EACH_ENGINE {
 				uint8 speed = grf_load_byte(&buf);
 
 				svi[i].max_speed = speed; // ?? units
 			}
-			break;
-		}
-		case 0x0c:
-		{	/* Cargo type */
-
-			foreach_engine {
+		}	break;
+		case 0x0C: { /* Cargo type */
+			FOR_EACH_ENGINE {
 				uint8 cargo = grf_load_byte(&buf);
 
 				// XXX: Need to consult this with patchman yet.
@@ -376,53 +336,40 @@
 #endif
 				svi[i].cargo_type = cargo;
 			}
-			break;
-		}
-		case 0x0d:
-		{	/* Cargo capacity */
-			foreach_engine {
+		}	break;
+		case 0x0D: {	/* Cargo capacity */
+			FOR_EACH_ENGINE {
 				uint16 capacity = grf_load_word(&buf);
 
 				svi[i].capacity = capacity;
 			}
-			break;
-		}
-		case 0x0f:
-		{	/* Running cost factor */
-			foreach_engine {
+		}	break;
+		case 0x0F: {	/* Running cost factor */
+			FOR_EACH_ENGINE {
 				uint8 runcost = grf_load_byte(&buf);
 
 				svi[i].running_cost = runcost;
 			}
-			break;
-		}
-		case 0x10:
-		{	/* SFX */
-			foreach_engine {
+		} break;
+		case 0x10: {	/* SFX */
+			FOR_EACH_ENGINE {
 				uint8 sfx = grf_load_byte(&buf);
 
 				svi[i].sfx = sfx;
 			}
-			break;
-		}
-		case 0x11:
-		{	/* Cargos available for refitting */
-			foreach_engine {
+		}	break;
+		case 0x11: {	/* Cargos available for refitting */
+			FOR_EACH_ENGINE {
 				uint32 refit_mask = grf_load_dword(&buf);
 
 				_engine_refit_masks[SHIP_ENGINES_INDEX + engine + i] = refit_mask;
 			}
-			break;
-		}
-		case 0x12:
-		{	/* Callback */
-			/* TODO */
-			ret = 1;
-			break;
-		}
+		}	break;
+		case 0x12: { /* Callback TODO */
+			ret = true;
+		}	break;
 		default:
-			ret = 1;
-			break;
+			ret = true;
 	}
 
 	*bufp = buf;
@@ -457,6 +404,7 @@
 		NULL,
 		NULL,
 	};
+
 	uint8 feature;
 	uint8 numprops;
 	uint8 numinfo;
@@ -482,67 +430,56 @@
 		uint8 prop = grf_load_byte(&buf);
 
 		switch (prop) {
-		case 0x00: {
-			/* Introduction date */
-			foreach_engine {
+		case 0x00: { /* Introduction date */
+			FOR_EACH_ENGINE {
 				uint16 date = grf_load_word(&buf);
 
 				ei[i].base_intro = date;
 			}
-			break;
-		}
-		case 0x02: {
-			/* Decay speed */
-			foreach_engine {
+		}	break;
+		case 0x02: { /* Decay speed */
+			FOR_EACH_ENGINE {
 				uint8 decay = grf_load_byte(&buf);
 
 				ei[i].unk2 &= 0x80;
 				ei[i].unk2 |= decay & 0x7f;
 			}
-			break;
-		}
-		case 0x03: {
-			/* Vehicle life */
-			foreach_engine {
+		}	break;
+		case 0x03: { /* Vehicle life */
+			FOR_EACH_ENGINE {
 				uint8 life = grf_load_byte(&buf);
 
 				ei[i].lifelength = life;
 			}
-			break;
-		}
-		case 0x04: {
-			/* Model life */
-			foreach_engine {
+		}	break;
+		case 0x04: { /* Model life */
+			FOR_EACH_ENGINE {
 				uint8 life = grf_load_byte(&buf);
 
 				ei[i].base_life = life;
 			}
-			break;
-		}
-		case 0x06: {
-			/* Climates available */
-			foreach_engine {
+		}	break;
+		case 0x06: { /* Climates available */
+			FOR_EACH_ENGINE {
 				uint8 climates = grf_load_byte(&buf);
 
 				ei[i].railtype_climates &= 0xf0;
 				ei[i].railtype_climates |= climates;
 			}
-			break;
-		}
-		case 0x07: { /* TODO */
-			/* Loading speed */
+		}	break;
+		case 0x07: { /* Loading spee */
+			/* TODO */
 			/* Hyronymus explained me what does
 			 * this mean and insists on having a
 			 * credit ;-). --pasky */
 			/* TODO: This needs to be supported by
 			 * LoadUnloadVehicle() first. */
-			foreach_engine {
+			FOR_EACH_ENGINE {
 				grf_load_byte(&buf);
 			}
 			goto ignoring;
 		}
-		default:
-		{
+		default: {
 			if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) {
 ignoring:
 				grfmsg(GMS_NOTICE, "VehicleChangeInfo: Ignoring property %x (not implemented).", prop);
@@ -750,7 +687,7 @@
 
 	check_length(len, 7, "VehicleMapSpriteSuperset");
 	feature = buf[1];
-	idcount = buf[2] & 0x7f;
+	idcount = buf[2] & 0x7F;
 	wagover = buf[2] & 0x80;
 	cidcount = buf[3 + idcount];
 
@@ -786,7 +723,7 @@
 				return;
 			}
 
-			if (ctype == 0xff)
+			if (ctype == 0xFF)
 				ctype = CID_PURCHASE;
 
 			if (wagover) {
@@ -926,7 +863,8 @@
 	uint8 paramsize;
 	uint8 condtype;
 	uint8 numsprites;
-	int param_val = 0, cond_val = 0, result;
+	int param_val = 0, cond_val = 0;
+	bool result;
 
 	check_length(len, 6, "SkipIf");
 	param = buf[1];
@@ -982,7 +920,7 @@
 			return;
 	}
 
-	if (result == 0) {
+	if (!result) {
 		grfmsg(GMS_NOTICE, "Not skipping sprites, test was false.");
 		return;
 	}
@@ -1065,7 +1003,7 @@
 	severity = buf[1];
 	msgid = buf[3];
 
-	if (msgid == 0xff) {
+	if (msgid == 0xFF) {
 		grfmsg(severity, "%s", buf+4);
 	} else {
 		grfmsg(severity, msgstr[msgid], buf+4);
@@ -1124,7 +1062,7 @@
 
 void DecodeSpecialSprite(const char *filename, int num, int spriteid)
 {
-#define NUM_ACTIONS 0xf
+#define NUM_ACTIONS 0xF
 	static const SpecialSpriteHandler handlers[NUM_ACTIONS] = {
 		/* 0x0 */ VehicleChangeInfo,
 		/* 0x1 */ SpriteNewSet,