vehicle.c
changeset 1796 614d996f6be7
parent 1793 b9a37c98b468
child 1802 da61740cc1e7
--- a/vehicle.c	Thu May 12 00:20:16 2005 +0000
+++ b/vehicle.c	Thu May 12 23:46:01 2005 +0000
@@ -1306,9 +1306,13 @@
 extern int32 CmdRefitShip(int x, int y, uint32 flags, uint32 p1, uint32 p2);
 extern int32 CmdRefitAircraft(int x, int y, uint32 flags, uint32 p1, uint32 p2);
 
-/* Replaces a vehicle (used to be called autorenew)
-    p1 - Index of vehicle
-    p2 - Type of new engine */
+/** Replaces a vehicle (used to be called autorenew).
+ * @param x,y unused
+ * @param p1 index of vehicle being replaced
+ * @param p2 various bitstuffed elements
+ * - p2 = (bit  0-15) - new engine type for the vehicle (p2 & 0xFFFF)
+ * - p2 = (bit 16-31) - money the player wants to have left after replacement counted in 100.000 (100K) (p2 >> 16)
+ */
 int32 CmdReplaceVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
 {
 	/* makesvariables to inform about how much money the player wants to have left after replacing
@@ -1317,11 +1321,11 @@
 	 This way the max is 6553 millions and it is more than the 32 bit that is stored in _patches
 	 This is a nice way to send 32 bit and only use 16 bit
 	 the last 8 bit is the engine. The 8 bits in front of the engine is free so it have room for 16 bit engine entries */
-	uint16 new_engine_type = (uint16)(p2 & 0xFFFF);
-	uint32 autorefit_money = (p2  >> 16) * 100000;
+	EngineID new_engine_type = (p2 & 0xFFFF);
+	uint32 autorefit_money = (p2 >> 16) * 100000;
 	Vehicle *v, *u, *first;
 	int cost, build_cost, rear_engine_cost = 0;
-	byte old_engine_type;
+	EngineID old_engine_type;
 
 	if (!IsVehicleIndex(p1)) return CMD_ERROR;
 
@@ -1329,9 +1333,9 @@
 
 	old_engine_type = v->engine_type;
 
-	// first we make sure that it's a valid type the user requested
-	// check that it's an engine that is in the engine array
-	if (new_engine_type >= TOTAL_NUM_ENGINES ) return CMD_ERROR;
+	/* First we make sure that it's a valid type the user requested
+	 * check that it's an engine that is in the engine array */
+	if (!IsEngineIndex(new_engine_type)) return CMD_ERROR;
 
 	// check that the new vehicle type is the same as the original one
 	if (v->type != DEREF_ENGINE(new_engine_type)->type) return CMD_ERROR;
@@ -1357,8 +1361,7 @@
 
 	/* In a rare situation, when 2 clients are connected to 1 company and have the same
 	    settings, a vehicle can be replaced twice.. check if this is the situation here */
-	if (old_engine_type == new_engine_type && v->age == 0)
-		return CMD_ERROR;
+	if (old_engine_type == new_engine_type && v->age == 0) return CMD_ERROR;
 
 	if ( v->type == VEH_Train ) {
 		first = GetFirstVehicleInChain(v);
@@ -1415,8 +1418,7 @@
 
 	if (flags & DC_EXEC) {
 		/* We do not really buy a new vehicle, we upgrade the old one */
-		Engine *e;
-		e = DEREF_ENGINE(new_engine_type);
+		Engine *e = DEREF_ENGINE(new_engine_type);
 
 		v->reliability = e->reliability;
 		v->reliability_spd_dec = e->reliability_spd_dec;
@@ -1427,7 +1429,6 @@
 
 		v->value = build_cost;
 
-
 		if (v->engine_type != new_engine_type) {
 			byte sprite = v->spritenum;
 			byte cargo_type = v->cargo_type;