(svn r11353) -Codechange: add support for newgrf callback 32
authorglx
Sun, 28 Oct 2007 16:00:51 +0000
changeset 8299 d5c112dc0726
parent 8298 b8f2b501e23a
child 8300 da89335c3116
(svn r11353) -Codechange: add support for newgrf callback 32
src/date.cpp
src/newgrf_callbacks.h
src/newgrf_engine.cpp
src/newgrf_engine.h
src/vehicle.cpp
src/vehicle.h
--- a/src/date.cpp	Sun Oct 28 15:40:18 2007 +0000
+++ b/src/date.cpp	Sun Oct 28 16:00:51 2007 +0000
@@ -220,7 +220,11 @@
 	for (i = daytick; i < total; i += DAY_TICKS) {
 		Vehicle *v = GetVehicle(i);
 
-		if (v->IsValid()) _on_new_vehicle_day_proc[v->type](v);
+		if (v->IsValid()) {
+			/* Call the 32-day callback if needed */
+			CheckVehicle32Day(v);
+			_on_new_vehicle_day_proc[v->type](v);
+		}
 	}
 }
 
--- a/src/newgrf_callbacks.h	Sun Oct 28 15:40:18 2007 +0000
+++ b/src/newgrf_callbacks.h	Sun Oct 28 16:00:51 2007 +0000
@@ -134,7 +134,7 @@
 	CBID_VEHICLE_START_STOP_CHECK        = 0x31,
 
 	/** Called for every vehicle every 32 days (not all on same date though). */
-	CBID_VEHICLE_32DAY_CALLBACK          = 0x32, // not implemented
+	CBID_VEHICLE_32DAY_CALLBACK          = 0x32,
 
 	/** Called to play a special sound effect */
 	CBID_VEHICLE_SOUND_EFFECT            = 0x33,
--- a/src/newgrf_engine.cpp	Sun Oct 28 15:40:18 2007 +0000
+++ b/src/newgrf_engine.cpp	Sun Oct 28 16:00:51 2007 +0000
@@ -1050,6 +1050,10 @@
 			assert(!first);
 			if (v->Next() != NULL) DoTriggerVehicle(v->Next(), VEHICLE_TRIGGER_ANY_NEW_CARGO, base_random_bits, false);
 			break;
+
+		case VEHICLE_TRIGGER_CALLBACK_32:
+			/* Do not do any recursion */
+			break;
 	}
 }
 
--- a/src/newgrf_engine.h	Sun Oct 28 15:40:18 2007 +0000
+++ b/src/newgrf_engine.h	Sun Oct 28 16:00:51 2007 +0000
@@ -49,6 +49,8 @@
 	VEHICLE_TRIGGER_EMPTY         = 4,
 	/* Not triggered externally (called for the whole chain if we got NEW_CARGO) */
 	VEHICLE_TRIGGER_ANY_NEW_CARGO = 8,
+	/* Externally triggered for each vehicle in chain */
+	VEHICLE_TRIGGER_CALLBACK_32   = 10,
 };
 void TriggerVehicle(Vehicle *veh, VehicleTrigger trigger);
 
--- a/src/vehicle.cpp	Sun Oct 28 15:40:18 2007 +0000
+++ b/src/vehicle.cpp	Sun Oct 28 16:00:51 2007 +0000
@@ -1398,6 +1398,15 @@
 	return found;
 }
 
+void CheckVehicle32Day(Vehicle *v)
+{
+	if ((v->day_counter & 0x1F) != 0) return;
+
+	uint16 callback = GetVehicleCallback(CBID_VEHICLE_32DAY_CALLBACK, 0, 0, v->engine_type, v);
+	if (callback == CALLBACK_FAILED) return;
+	if (HASBIT(callback, 0)) TriggerVehicle(v, VEHICLE_TRIGGER_CALLBACK_32); // Trigger vehicle trigger 10
+	if (HASBIT(callback, 1)) v->colormap = PAL_NONE;                         // Update colormap via callback 2D
+}
 
 void DecreaseVehicleValue(Vehicle *v)
 {
--- a/src/vehicle.h	Sun Oct 28 15:40:18 2007 +0000
+++ b/src/vehicle.h	Sun Oct 28 16:00:51 2007 +0000
@@ -591,6 +591,7 @@
 byte VehicleRandomBits();
 void ResetVehiclePosHash();
 void ResetVehicleColorMap();
+void CheckVehicle32Day(Vehicle *v);
 
 bool CanRefitTo(EngineID engine_type, CargoID cid_to);
 CargoID FindFirstRefittableCargo(EngineID engine_type);