src/newgrf_engine.cpp
changeset 6173 bada5ccbdc7f
parent 6157 ed6db74cdf30
child 6176 153f0f24dc1b
equal deleted inserted replaced
6172:e6d7a5b3d63f 6173:bada5ccbdc7f
   455 
   455 
   456 	if (v != NULL) v->waiting_triggers = triggers;
   456 	if (v != NULL) v->waiting_triggers = triggers;
   457 }
   457 }
   458 
   458 
   459 
   459 
   460 static uint32 GetVehicleTypeInfo(EngineID engine_type)
       
   461 {
       
   462 	/* Bit 0  Vehicle type is available on the market
       
   463 	 * Bit 1  Vehicle type is in the testing phase
       
   464 	 * Bit 2  Exclusive testing offer for a human player active */
       
   465 	const Engine *e = GetEngine(engine_type);
       
   466 	uint32 var = 0;
       
   467 
       
   468 	if (e->player_avail == 0xFF) SETBIT(var, 0);
       
   469 	if (e->age < e->duration_phase_1) SETBIT(var, 1);
       
   470 	if (e->player_avail > 0 && e->player_avail != 0xFF) SETBIT(var, 2);
       
   471 	return var;
       
   472 }
       
   473 
       
   474 
       
   475 static uint32 GetGRFParameter(EngineID engine_type, byte parameter)
   460 static uint32 GetGRFParameter(EngineID engine_type, byte parameter)
   476 {
   461 {
   477 	const GRFFile *file = GetEngineGRF(engine_type);
   462 	const GRFFile *file = GetEngineGRF(engine_type);
   478 
   463 
   479 	if (parameter >= file->param_end) return 0;
   464 	if (parameter >= file->param_end) return 0;
   488 	if (v == NULL) {
   473 	if (v == NULL) {
   489 		/* Vehicle does not exist, so we're in a purchase list */
   474 		/* Vehicle does not exist, so we're in a purchase list */
   490 		switch (variable) {
   475 		switch (variable) {
   491 			case 0x43: return _current_player; /* Owner information */
   476 			case 0x43: return _current_player; /* Owner information */
   492 			case 0x46: return 0;               /* Motion counter */
   477 			case 0x46: return 0;               /* Motion counter */
   493 			case 0x48: return GetVehicleTypeInfo(object->u.vehicle.self_type); /* Vehicle Type Info */
   478 			case 0x48: return GetEngine(object->u.vehicle.self_type)->flags; /* Vehicle Type Info */
   494 			case 0xC4: return clamp(_cur_year, ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR; /* Build year */
   479 			case 0xC4: return clamp(_cur_year, ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR; /* Build year */
   495 			case 0xDA: return INVALID_VEHICLE; /* Next vehicle */
   480 			case 0xDA: return INVALID_VEHICLE; /* Next vehicle */
   496 			case 0x7F: return GetGRFParameter(object->u.vehicle.self_type, parameter); /* Read GRF parameter */
   481 			case 0x7F: return GetGRFParameter(object->u.vehicle.self_type, parameter); /* Read GRF parameter */
   497 		}
   482 		}
   498 
   483 
   599 			const CargoSpec *cs = GetCargo(v->cargo_type);
   584 			const CargoSpec *cs = GetCargo(v->cargo_type);
   600 
   585 
   601 			return (cs->classes << 16) | (cs->weight << 8) | GetEngineGRF(v->engine_type)->cargo_map[v->cargo_type];
   586 			return (cs->classes << 16) | (cs->weight << 8) | GetEngineGRF(v->engine_type)->cargo_map[v->cargo_type];
   602 		}
   587 		}
   603 
   588 
   604 		case 0x48: return GetVehicleTypeInfo(v->engine_type); /* Vehicle Type Info */
   589 		case 0x48: return GetEngine(v->engine_type)->flags; /* Vehicle Type Info */
   605 
   590 
   606 		/* Variables which use the parameter */
   591 		/* Variables which use the parameter */
   607 		case 0x60: /* Count consist's engine ID occurance */
   592 		case 0x60: /* Count consist's engine ID occurance */
   608 			if (v->type != VEH_Train) return v->engine_type == parameter;
   593 			if (v->type != VEH_Train) return v->engine_type == parameter;
   609 
   594