equal
deleted
inserted
replaced
193 } |
193 } |
194 |
194 |
195 |
195 |
196 static int MapOldSubType(const Vehicle *v) |
196 static int MapOldSubType(const Vehicle *v) |
197 { |
197 { |
198 if (v->type != VEH_Train) return v->subtype; |
198 if (v->type != VEH_TRAIN) return v->subtype; |
199 if (IsTrainEngine(v)) return 0; |
199 if (IsTrainEngine(v)) return 0; |
200 if (IsFreeWagon(v)) return 4; |
200 if (IsFreeWagon(v)) return 4; |
201 return 2; |
201 return 2; |
202 } |
202 } |
203 |
203 |
487 |
487 |
488 /* Calculated vehicle parameters */ |
488 /* Calculated vehicle parameters */ |
489 switch (variable) { |
489 switch (variable) { |
490 case 0x40: /* Get length of consist */ |
490 case 0x40: /* Get length of consist */ |
491 case 0x41: /* Get length of same consecutive wagons */ |
491 case 0x41: /* Get length of same consecutive wagons */ |
492 if (v->type != VEH_Train) return 1; |
492 if (v->type != VEH_TRAIN) return 1; |
493 |
493 |
494 { |
494 { |
495 const Vehicle* u; |
495 const Vehicle* u; |
496 byte chain_before = 0; |
496 byte chain_before = 0; |
497 byte chain_after = 0; |
497 byte chain_after = 0; |
543 |
543 |
544 case 0x43: /* Player information */ |
544 case 0x43: /* Player information */ |
545 return v->owner; |
545 return v->owner; |
546 |
546 |
547 case 0x44: /* Aircraft information */ |
547 case 0x44: /* Aircraft information */ |
548 if (v->type != VEH_Aircraft) return UINT_MAX; |
548 if (v->type != VEH_AIRCRAFT) return UINT_MAX; |
549 |
549 |
550 { |
550 { |
551 const Vehicle *w = v->next; |
551 const Vehicle *w = v->next; |
552 uint16 altitude = v->z_pos - w->z_pos; /* Aircraft height - shadow height */ |
552 uint16 altitude = v->z_pos - w->z_pos; /* Aircraft height - shadow height */ |
553 byte airporttype; |
553 byte airporttype; |
588 |
588 |
589 case 0x48: return GetEngine(v->engine_type)->flags; /* Vehicle Type Info */ |
589 case 0x48: return GetEngine(v->engine_type)->flags; /* Vehicle Type Info */ |
590 |
590 |
591 /* Variables which use the parameter */ |
591 /* Variables which use the parameter */ |
592 case 0x60: /* Count consist's engine ID occurance */ |
592 case 0x60: /* Count consist's engine ID occurance */ |
593 if (v->type != VEH_Train) return v->engine_type == parameter; |
593 if (v->type != VEH_TRAIN) return v->engine_type == parameter; |
594 |
594 |
595 { |
595 { |
596 uint count = 0; |
596 uint count = 0; |
597 for (; v != NULL; v = v->next) { |
597 for (; v != NULL; v = v->next) { |
598 if (v->engine_type == parameter) count++; |
598 if (v->engine_type == parameter) count++; |
697 case 0x7B: return v->waiting_triggers; |
697 case 0x7B: return v->waiting_triggers; |
698 } |
698 } |
699 |
699 |
700 /* Vehicle specific properties */ |
700 /* Vehicle specific properties */ |
701 switch (v->type) { |
701 switch (v->type) { |
702 case VEH_Train: |
702 case VEH_TRAIN: |
703 switch (variable - 0x80) { |
703 switch (variable - 0x80) { |
704 case 0x62: return v->u.rail.track; |
704 case 0x62: return v->u.rail.track; |
705 case 0x66: return v->u.rail.railtype; |
705 case 0x66: return v->u.rail.railtype; |
706 case 0x73: return v->u.rail.cached_veh_length; |
706 case 0x73: return v->u.rail.cached_veh_length; |
707 case 0x74: return v->u.rail.cached_power; |
707 case 0x74: return v->u.rail.cached_power; |
712 case 0x7D: return GB(v->first->index, 8, 8); |
712 case 0x7D: return GB(v->first->index, 8, 8); |
713 case 0x7F: return 0; // Used for vehicle reversing hack in TTDP |
713 case 0x7F: return 0; // Used for vehicle reversing hack in TTDP |
714 } |
714 } |
715 break; |
715 break; |
716 |
716 |
717 case VEH_Road: |
717 case VEH_ROAD: |
718 switch (variable - 0x80) { |
718 switch (variable - 0x80) { |
719 case 0x62: return v->u.road.state; |
719 case 0x62: return v->u.road.state; |
720 case 0x64: return v->u.road.blocked_ctr; |
720 case 0x64: return v->u.road.blocked_ctr; |
721 case 0x65: return GB(v->u.road.blocked_ctr, 8, 8); |
721 case 0x65: return GB(v->u.road.blocked_ctr, 8, 8); |
722 case 0x66: return v->u.road.overtaking; |
722 case 0x66: return v->u.road.overtaking; |
724 case 0x68: return v->u.road.crashed_ctr; |
724 case 0x68: return v->u.road.crashed_ctr; |
725 case 0x69: return GB(v->u.road.crashed_ctr, 8, 8); |
725 case 0x69: return GB(v->u.road.crashed_ctr, 8, 8); |
726 } |
726 } |
727 break; |
727 break; |
728 |
728 |
729 case VEH_Aircraft: |
729 case VEH_AIRCRAFT: |
730 switch (variable - 0x80) { |
730 switch (variable - 0x80) { |
731 case 0x62: return MapAircraftMovementState(v); // Current movement state |
731 case 0x62: return MapAircraftMovementState(v); // Current movement state |
732 case 0x63: return v->u.air.targetairport; // Airport to which the action refers |
732 case 0x63: return v->u.air.targetairport; // Airport to which the action refers |
733 case 0x66: return MapAircraftMovementAction(v); // Current movement action |
733 case 0x66: return MapAircraftMovementAction(v); // Current movement action |
734 } |
734 } |
749 uint set; |
749 uint set; |
750 bool in_motion; |
750 bool in_motion; |
751 |
751 |
752 if (v == NULL) return group->g.real.loading[0]; |
752 if (v == NULL) return group->g.real.loading[0]; |
753 |
753 |
754 if (v->type == VEH_Train) { |
754 if (v->type == VEH_TRAIN) { |
755 in_motion = GetFirstVehicleInChain(v)->current_order.type != OT_LOADING; |
755 in_motion = GetFirstVehicleInChain(v)->current_order.type != OT_LOADING; |
756 } else { |
756 } else { |
757 in_motion = v->current_order.type != OT_LOADING; |
757 in_motion = v->current_order.type != OT_LOADING; |
758 } |
758 } |
759 |
759 |
778 res->SetTriggers = &VehicleSetTriggers; |
778 res->SetTriggers = &VehicleSetTriggers; |
779 res->GetVariable = &VehicleGetVariable; |
779 res->GetVariable = &VehicleGetVariable; |
780 res->ResolveReal = &VehicleResolveReal; |
780 res->ResolveReal = &VehicleResolveReal; |
781 |
781 |
782 res->u.vehicle.self = v; |
782 res->u.vehicle.self = v; |
783 res->u.vehicle.parent = (v != NULL && v->type == VEH_Train) ? GetFirstVehicleInChain(v) : v; |
783 res->u.vehicle.parent = (v != NULL && v->type == VEH_TRAIN) ? GetFirstVehicleInChain(v) : v; |
784 |
784 |
785 res->u.vehicle.self_type = engine_type; |
785 res->u.vehicle.self_type = engine_type; |
786 |
786 |
787 res->info_view = false; |
787 res->info_view = false; |
788 |
788 |
810 if (v == NULL) { |
810 if (v == NULL) { |
811 cargo = CT_PURCHASE; |
811 cargo = CT_PURCHASE; |
812 } else { |
812 } else { |
813 cargo = v->cargo_type; |
813 cargo = v->cargo_type; |
814 |
814 |
815 if (v->type == VEH_Train) { |
815 if (v->type == VEH_TRAIN) { |
816 group = GetWagonOverrideSpriteSet(engine, cargo, v->u.rail.first_engine); |
816 group = GetWagonOverrideSpriteSet(engine, cargo, v->u.rail.first_engine); |
817 |
817 |
818 if (group != NULL) return group; |
818 if (group != NULL) return group; |
819 } |
819 } |
820 } |
820 } |
872 * @param v The wagon to check |
872 * @param v The wagon to check |
873 * @return true if it is using an override, false otherwise |
873 * @return true if it is using an override, false otherwise |
874 */ |
874 */ |
875 bool UsesWagonOverride(const Vehicle* v) |
875 bool UsesWagonOverride(const Vehicle* v) |
876 { |
876 { |
877 assert(v->type == VEH_Train); |
877 assert(v->type == VEH_TRAIN); |
878 return GetWagonOverrideSpriteSet(v->engine_type, v->cargo_type, v->u.rail.first_engine) != NULL; |
878 return GetWagonOverrideSpriteSet(v->engine_type, v->cargo_type, v->u.rail.first_engine) != NULL; |
879 } |
879 } |
880 |
880 |
881 /** |
881 /** |
882 * Evaluate a newgrf callback for vehicles |
882 * Evaluate a newgrf callback for vehicles |
960 * same for all triggered vehicles in the chain (to get |
960 * same for all triggered vehicles in the chain (to get |
961 * all the random-cargo wagons carry the same cargo, |
961 * all the random-cargo wagons carry the same cargo, |
962 * i.e.), so we give them all the NEW_CARGO triggered |
962 * i.e.), so we give them all the NEW_CARGO triggered |
963 * vehicle's portion of random bits. */ |
963 * vehicle's portion of random bits. */ |
964 assert(first); |
964 assert(first); |
965 DoTriggerVehicle((v->type == VEH_Train) ? GetFirstVehicleInChain(v) : v, VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false); |
965 DoTriggerVehicle((v->type == VEH_TRAIN) ? GetFirstVehicleInChain(v) : v, VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false); |
966 break; |
966 break; |
967 |
967 |
968 case VEHICLE_TRIGGER_DEPOT: |
968 case VEHICLE_TRIGGER_DEPOT: |
969 /* We now trigger the next vehicle in chain recursively. |
969 /* We now trigger the next vehicle in chain recursively. |
970 * The random bits portions may be different for each |
970 * The random bits portions may be different for each |