train_cmd.c
changeset 3390 ae4b0872dc78
parent 3355 e414a0b104a6
child 3411 72993ac027ea
equal deleted inserted replaced
3389:56f72f7838cc 3390:ae4b0872dc78
   162 		if (!IsArticulatedPart(u)) {
   162 		if (!IsArticulatedPart(u)) {
   163 			// check if its a powered wagon
   163 			// check if its a powered wagon
   164 			CLRBIT(u->u.rail.flags, VRF_POWEREDWAGON);
   164 			CLRBIT(u->u.rail.flags, VRF_POWEREDWAGON);
   165 			if ((rvi_v->pow_wag_power != 0) && (rvi_u->flags & RVI_WAGON) && UsesWagonOverride(u)) {
   165 			if ((rvi_v->pow_wag_power != 0) && (rvi_u->flags & RVI_WAGON) && UsesWagonOverride(u)) {
   166 				if (HASBIT(rvi_u->callbackmask, CBM_WAGON_POWER)) {
   166 				if (HASBIT(rvi_u->callbackmask, CBM_WAGON_POWER)) {
   167 					uint16 callback = GetCallBackResult(CBID_TRAIN_WAGON_POWER,  u->engine_type, u);
   167 					uint16 callback = GetVehicleCallback(CBID_TRAIN_WAGON_POWER, 0, 0, u->engine_type, u);
   168 
   168 
   169 					if (callback != CALLBACK_FAILED)
   169 					if (callback != CALLBACK_FAILED)
   170 						u->u.rail.cached_vis_effect = callback;
   170 						u->u.rail.cached_vis_effect = callback;
   171 				}
   171 				}
   172 
   172 
   189 		}
   189 		}
   190 
   190 
   191 		// check the vehicle length (callback)
   191 		// check the vehicle length (callback)
   192 		veh_len = CALLBACK_FAILED;
   192 		veh_len = CALLBACK_FAILED;
   193 		if (HASBIT(rvi_u->callbackmask, CBM_VEHICLE_LENGTH))
   193 		if (HASBIT(rvi_u->callbackmask, CBM_VEHICLE_LENGTH))
   194 			veh_len = GetCallBackResult(CBID_TRAIN_VEHICLE_LENGTH,  u->engine_type, u);
   194 			veh_len = GetVehicleCallback(CBID_TRAIN_VEHICLE_LENGTH, 0, 0, u->engine_type, u);
   195 		if (veh_len == CALLBACK_FAILED)
   195 		if (veh_len == CALLBACK_FAILED)
   196 			veh_len = rvi_u->shorten_factor;
   196 			veh_len = rvi_u->shorten_factor;
   197 		veh_len = clamp(veh_len, 0, u->next == NULL ? 7 : 5); // the clamp on vehicles not the last in chain is stricter, as too short wagons can break the 'follow next vehicle' code
   197 		veh_len = clamp(veh_len, 0, u->next == NULL ? 7 : 5); // the clamp on vehicles not the last in chain is stricter, as too short wagons can break the 'follow next vehicle' code
   198 		u->u.rail.cached_veh_length = 8 - veh_len;
   198 		u->u.rail.cached_veh_length = 8 - veh_len;
   199 		v->u.rail.cached_total_length += u->u.rail.cached_veh_length;
   199 		v->u.rail.cached_total_length += u->u.rail.cached_veh_length;
   483 	uint i;
   483 	uint i;
   484 
   484 
   485 	if (!HASBIT(rvi->callbackmask, CBM_ARTIC_ENGINE)) return 0;
   485 	if (!HASBIT(rvi->callbackmask, CBM_ARTIC_ENGINE)) return 0;
   486 
   486 
   487 	for (i = 1; i < 10; i++) {
   487 	for (i = 1; i < 10; i++) {
   488 		callback = GetCallBackResult(CBID_TRAIN_ARTIC_ENGINE + (i << 8), engine_type, NULL);
   488 		callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, engine_type, NULL);
   489 		if (callback == CALLBACK_FAILED || callback == 0xFF) break;
   489 		if (callback == CALLBACK_FAILED || callback == 0xFF) break;
   490 	}
   490 	}
   491 
   491 
   492 	return i - 1;
   492 	return i - 1;
   493 }
   493 }
   503 	uint i;
   503 	uint i;
   504 
   504 
   505 	if (!HASBIT(rvi->callbackmask, CBM_ARTIC_ENGINE)) return;
   505 	if (!HASBIT(rvi->callbackmask, CBM_ARTIC_ENGINE)) return;
   506 
   506 
   507 	for (i = 1; i < 10; i++) {
   507 	for (i = 1; i < 10; i++) {
   508 		callback = GetCallBackResult(CBID_TRAIN_ARTIC_ENGINE + (i << 8), v->engine_type, NULL);
   508 		callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, v->engine_type, NULL);
   509 		if (callback == CALLBACK_FAILED || callback == 0xFF) return;
   509 		if (callback == CALLBACK_FAILED || callback == 0xFF) return;
   510 
   510 
   511 		u->next = vl[i];
   511 		u->next = vl[i];
   512 		u = u->next;
   512 		u = u->next;
   513 
   513 
  1735 
  1735 
  1736 			if (HASBIT(rvi->callbackmask, CBM_REFIT_CAPACITY)) {
  1736 			if (HASBIT(rvi->callbackmask, CBM_REFIT_CAPACITY)) {
  1737 				/* Check the 'refit capacity' callback */
  1737 				/* Check the 'refit capacity' callback */
  1738 				CargoID temp_cid = v->cargo_type;
  1738 				CargoID temp_cid = v->cargo_type;
  1739 				v->cargo_type = new_cid;
  1739 				v->cargo_type = new_cid;
  1740 				amount = GetCallBackResult(CBID_VEHICLE_REFIT_CAPACITY, v->engine_type, v);
  1740 				amount = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, v->engine_type, v);
  1741 				v->cargo_type = temp_cid;
  1741 				v->cargo_type = temp_cid;
  1742 			}
  1742 			}
  1743 
  1743 
  1744 			if (amount == CALLBACK_FAILED) { // callback failed or not used, use default
  1744 			if (amount == CALLBACK_FAILED) { // callback failed or not used, use default
  1745 				CargoID old_cid = rvi->cargo_type;
  1745 				CargoID old_cid = rvi->cargo_type;