134 |
134 |
135 if (!(rvi->flags & RVI_WAGON)) { |
135 if (!(rvi->flags & RVI_WAGON)) { |
136 /* it's an engine */ |
136 /* it's an engine */ |
137 int multihead = (rvi->flags&RVI_MULTIHEAD?1:0); |
137 int multihead = (rvi->flags&RVI_MULTIHEAD?1:0); |
138 |
138 |
139 SET_DPARAM32(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5); |
139 SetDParam(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5); |
140 SET_DPARAM16(2, rvi->max_speed * 10 >> 4); |
140 SetDParam(2, rvi->max_speed * 10 >> 4); |
141 SET_DPARAM16(3, rvi->power << multihead); |
141 SetDParam(3, rvi->power << multihead); |
142 SET_DPARAM16(1, rvi->weight << multihead); |
142 SetDParam(1, rvi->weight << multihead); |
143 SET_DPARAM32(4, (rvi->running_cost_base * _price.running_rail[rvi->engclass] >> 8) << multihead); |
143 SetDParam(4, (rvi->running_cost_base * _price.running_rail[rvi->engclass] >> 8) << multihead); |
144 |
144 |
145 SET_DPARAM16(5, STR_8838_N_A); |
145 SetDParam(5, STR_8838_N_A); |
146 if (rvi->capacity != 0) { |
146 if (rvi->capacity != 0) { |
147 SET_DPARAM16(6, rvi->capacity << multihead); |
147 SetDParam(6, rvi->capacity << multihead); |
148 SET_DPARAM16(5, _cargoc.names_long_p[rvi->cargo_type]); |
148 SetDParam(5, _cargoc.names_long_p[rvi->cargo_type]); |
149 } |
149 } |
150 |
150 |
151 e = &_engines[selected_id]; |
151 e = &_engines[selected_id]; |
152 |
152 |
153 SET_DPARAM16(8, e->lifelength); |
153 SetDParam(8, e->lifelength); |
154 SET_DPARAM8(9, e->reliability * 100 >> 16); |
154 SetDParam(9, e->reliability * 100 >> 16); |
155 ConvertDayToYMD(&ymd, e->intro_date); |
155 ConvertDayToYMD(&ymd, e->intro_date); |
156 SET_DPARAM16(7, ymd.year + 1920); |
156 SetDParam(7, ymd.year + 1920); |
157 |
157 |
158 DrawString(2, 0x7F, STR_8817_COST_WEIGHT_T_SPEED_POWER, 0); |
158 DrawString(2, 0x7F, STR_8817_COST_WEIGHT_T_SPEED_POWER, 0); |
159 } else { |
159 } else { |
160 /* it's a wagon */ |
160 /* it's a wagon */ |
161 |
161 |
162 SET_DPARAM32(0, |
162 SetDParam(0, |
163 DoCommandByTile(w->window_number, selected_id, 0, DC_QUERY_COST, CMD_BUILD_RAIL_VEHICLE) |
163 DoCommandByTile(w->window_number, selected_id, 0, DC_QUERY_COST, CMD_BUILD_RAIL_VEHICLE) |
164 ); |
164 ); |
165 SET_DPARAM16(4, rvi->capacity); |
165 SetDParam(4, rvi->capacity); |
166 SET_DPARAM16(1, rvi->weight); |
166 SetDParam(1, rvi->weight); |
167 SET_DPARAM16(3, _cargoc.names_long_p[rvi->cargo_type]); |
167 SetDParam(3, _cargoc.names_long_p[rvi->cargo_type]); |
168 SET_DPARAM16(2, (_cargoc.weights[rvi->cargo_type] * rvi->capacity >> 4) + rvi->weight); |
168 SetDParam(2, (_cargoc.weights[rvi->cargo_type] * rvi->capacity >> 4) + rvi->weight); |
169 DrawString(2, 0x7F, STR_8821_COST_WEIGHT_T_T_CAPACITY, 0); |
169 DrawString(2, 0x7F, STR_8821_COST_WEIGHT_T_T_CAPACITY, 0); |
170 } |
170 } |
171 } |
171 } |
172 } |
172 } |
173 break; |
173 break; |
324 v->u.rail.track == 0x80 && |
324 v->u.rail.track == 0x80 && |
325 --num < 0 && num >= -6) { |
325 --num < 0 && num >= -6) { |
326 |
326 |
327 DrawTrainImage(v, x+21, y, 10, w->hscroll.pos, WP(w,traindepot_d).sel); |
327 DrawTrainImage(v, x+21, y, 10, w->hscroll.pos, WP(w,traindepot_d).sel); |
328 /* Draw the train number */ |
328 /* Draw the train number */ |
329 SET_DPARAM16(0, v->unitnumber); |
329 SetDParam(0, v->unitnumber); |
330 DrawString(x, y, (v->max_age - 366 < v->age) ? STR_00E3 : STR_00E2, 0); |
330 DrawString(x, y, (v->max_age - 366 < v->age) ? STR_00E3 : STR_00E2, 0); |
331 /* Draw the pretty flag */ |
331 /* Draw the pretty flag */ |
332 DrawSprite(v->vehstatus&VS_STOPPED ? 0xC12 : 0xC13, x+15, y); |
332 DrawSprite(v->vehstatus&VS_STOPPED ? 0xC12 : 0xC13, x+15, y); |
333 |
333 |
334 y += 14; |
334 y += 14; |
669 WP(w,refit_d).cargo = cargo; |
669 WP(w,refit_d).cargo = cargo; |
670 |
670 |
671 if (cargo != -1) { |
671 if (cargo != -1) { |
672 int32 cost = DoCommandByTile(v->tile, v->index, cargo, 0, CMD_REFIT_RAIL_VEHICLE); |
672 int32 cost = DoCommandByTile(v->tile, v->index, cargo, 0, CMD_REFIT_RAIL_VEHICLE); |
673 if (cost != CMD_ERROR) { |
673 if (cost != CMD_ERROR) { |
674 SET_DPARAM32(2, cost); |
674 SetDParam(2, cost); |
675 SET_DPARAM16(0, _cargoc.names_long_p[cargo]); |
675 SetDParam(0, _cargoc.names_long_p[cargo]); |
676 SET_DPARAM16(1, _returned_refit_amount); |
676 SetDParam(1, _returned_refit_amount); |
677 DrawString(1, 137, STR_9840_NEW_CAPACITY_COST_OF_REFIT, 0); |
677 DrawString(1, 137, STR_9840_NEW_CAPACITY_COST_OF_REFIT, 0); |
678 } |
678 } |
679 } |
679 } |
680 break; |
680 break; |
681 } |
681 } |
772 str = STR_885C_BROKEN_DOWN; |
772 str = STR_885C_BROKEN_DOWN; |
773 } else if (v->vehstatus & VS_STOPPED) { |
773 } else if (v->vehstatus & VS_STOPPED) { |
774 if (v->u.rail.last_speed == 0) { |
774 if (v->u.rail.last_speed == 0) { |
775 str = STR_8861_STOPPED; |
775 str = STR_8861_STOPPED; |
776 } else { |
776 } else { |
777 SET_DPARAM16(0, v->u.rail.last_speed * 10 >> 4); |
777 SetDParam(0, v->u.rail.last_speed * 10 >> 4); |
778 str = STR_TRAIN_STOPPING + _patches.vehicle_speed; |
778 str = STR_TRAIN_STOPPING + _patches.vehicle_speed; |
779 } |
779 } |
780 } else { |
780 } else { |
781 switch(v->next_order & OT_MASK) { |
781 switch(v->next_order & OT_MASK) { |
782 case OT_GOTO_STATION: { |
782 case OT_GOTO_STATION: { |
783 str = STR_HEADING_FOR_STATION + _patches.vehicle_speed; |
783 str = STR_HEADING_FOR_STATION + _patches.vehicle_speed; |
784 SET_DPARAM16(0, v->next_order_param); |
784 SetDParam(0, v->next_order_param); |
785 SET_DPARAM16(1, v->u.rail.last_speed * 10 >> 4); |
785 SetDParam(1, v->u.rail.last_speed * 10 >> 4); |
786 } break; |
786 } break; |
787 |
787 |
788 case OT_GOTO_DEPOT: { |
788 case OT_GOTO_DEPOT: { |
789 Depot *dep = &_depots[v->next_order_param]; |
789 Depot *dep = &_depots[v->next_order_param]; |
790 SET_DPARAM16(0, dep->town_index); |
790 SetDParam(0, dep->town_index); |
791 str = STR_HEADING_FOR_TRAIN_DEPOT + _patches.vehicle_speed; |
791 str = STR_HEADING_FOR_TRAIN_DEPOT + _patches.vehicle_speed; |
792 SET_DPARAM16(1, v->u.rail.last_speed * 10 >> 4); |
792 SetDParam(1, v->u.rail.last_speed * 10 >> 4); |
793 } break; |
793 } break; |
794 |
794 |
795 case OT_LOADING: |
795 case OT_LOADING: |
796 case OT_LEAVESTATION: |
796 case OT_LEAVESTATION: |
797 str = STR_882F_LOADING_UNLOADING; |
797 str = STR_882F_LOADING_UNLOADING; |
798 break; |
798 break; |
799 |
799 |
800 case OT_GOTO_WAYPOINT: { |
800 case OT_GOTO_WAYPOINT: { |
801 SET_DPARAM16(0, v->next_order_param); |
801 SetDParam(0, v->next_order_param); |
802 str = STR_HEADING_FOR_WAYPOINT + _patches.vehicle_speed; |
802 str = STR_HEADING_FOR_WAYPOINT + _patches.vehicle_speed; |
803 SET_DPARAM16(1, v->u.rail.last_speed * 10 >> 4); |
803 SetDParam(1, v->u.rail.last_speed * 10 >> 4); |
804 break; |
804 break; |
805 } |
805 } |
806 |
806 |
807 default: |
807 default: |
808 if (v->num_orders == 0) { |
808 if (v->num_orders == 0) { |
809 str = STR_NO_ORDERS + _patches.vehicle_speed; |
809 str = STR_NO_ORDERS + _patches.vehicle_speed; |
810 SET_DPARAM16(0, v->u.rail.last_speed * 10 >> 4); |
810 SetDParam(0, v->u.rail.last_speed * 10 >> 4); |
811 } else |
811 } else |
812 str = STR_EMPTY; |
812 str = STR_EMPTY; |
813 break; |
813 break; |
814 } |
814 } |
815 } |
815 } |
915 const RailVehicleInfo *rvi; |
915 const RailVehicleInfo *rvi; |
916 |
916 |
917 rvi = &_rail_vehicle_info[v->engine_type]; |
917 rvi = &_rail_vehicle_info[v->engine_type]; |
918 |
918 |
919 if (!(rvi->flags & RVI_WAGON)) { |
919 if (!(rvi->flags & RVI_WAGON)) { |
920 SET_DPARAM16(0, GetCustomEngineName(v->engine_type)); |
920 SetDParam(0, GetCustomEngineName(v->engine_type)); |
921 SET_DPARAM16(1, v->build_year + 1920); |
921 SetDParam(1, v->build_year + 1920); |
922 SET_DPARAM32(2, v->value); |
922 SetDParam(2, v->value); |
923 DrawString(x, y, STR_882C_BUILT_VALUE, 0x10); |
923 DrawString(x, y, STR_882C_BUILT_VALUE, 0x10); |
924 } else { |
924 } else { |
925 SET_DPARAM16(0, GetCustomEngineName(v->engine_type)); |
925 SetDParam(0, GetCustomEngineName(v->engine_type)); |
926 SET_DPARAM32(1, v->value); |
926 SetDParam(1, v->value); |
927 DrawString(x, y, STR_882D_VALUE, 0x10); |
927 DrawString(x, y, STR_882D_VALUE, 0x10); |
928 } |
928 } |
929 } |
929 } |
930 |
930 |
931 static void TrainDetailsCapacityTab(Vehicle *v, int x, int y) |
931 static void TrainDetailsCapacityTab(Vehicle *v, int x, int y) |
932 { |
932 { |
933 if (v->cargo_cap != 0) { |
933 if (v->cargo_cap != 0) { |
934 SET_DPARAM16(1, v->cargo_cap); |
934 SetDParam(1, v->cargo_cap); |
935 SET_DPARAM16(0, _cargoc.names_long_p[v->cargo_type]); |
935 SetDParam(0, _cargoc.names_long_p[v->cargo_type]); |
936 DrawString(x, y, STR_013F_CAPACITY, 0); |
936 DrawString(x, y, STR_013F_CAPACITY, 0); |
937 } |
937 } |
938 } |
938 } |
939 |
939 |
940 typedef void TrainDetailsDrawerProc(Vehicle *v, int x, int y); |
940 typedef void TrainDetailsDrawerProc(Vehicle *v, int x, int y); |
988 w->disabled_state |= (1 << 2); |
988 w->disabled_state |= (1 << 2); |
989 |
989 |
990 if (!_patches.servint_trains) // disable service-scroller when interval is set to disabled |
990 if (!_patches.servint_trains) // disable service-scroller when interval is set to disabled |
991 w->disabled_state |= (1 << 6) | (1 << 7); |
991 w->disabled_state |= (1 << 6) | (1 << 7); |
992 |
992 |
993 SET_DPARAM16(0, v->string_id); |
993 SetDParam(0, v->string_id); |
994 SET_DPARAM16(1, v->unitnumber); |
994 SetDParam(1, v->unitnumber); |
995 DrawWindowWidgets(w); |
995 DrawWindowWidgets(w); |
996 |
996 |
997 num = v->age / 366; |
997 num = v->age / 366; |
998 SET_DPARAM16(1, num); |
998 SetDParam(1, num); |
999 |
999 |
1000 x = 2; |
1000 x = 2; |
1001 |
1001 |
1002 str = STR_0199_YEAR; |
1002 str = STR_0199_YEAR; |
1003 if (num != 1) { |
1003 if (num != 1) { |
1004 str += STR_019A_YEARS - STR_0199_YEAR; |
1004 str += STR_019A_YEARS - STR_0199_YEAR; |
1005 if ((uint16)(v->max_age - 366) < v->age) |
1005 if ((uint16)(v->max_age - 366) < v->age) |
1006 str += STR_019B_YEARS - STR_019A_YEARS; |
1006 str += STR_019B_YEARS - STR_019A_YEARS; |
1007 } |
1007 } |
1008 SET_DPARAM16(0, str); |
1008 SetDParam(0, str); |
1009 SET_DPARAM16(2, v->max_age / 366); |
1009 SetDParam(2, v->max_age / 366); |
1010 SET_DPARAM32(3, GetTrainRunningCost(v) >> 8); |
1010 SetDParam(3, GetTrainRunningCost(v) >> 8); |
1011 DrawString(x, 15, STR_885D_AGE_RUNNING_COST_YR, 0); |
1011 DrawString(x, 15, STR_885D_AGE_RUNNING_COST_YR, 0); |
1012 |
1012 |
1013 SET_DPARAM16(2, v->max_speed * 10 >> 4); |
1013 SetDParam(2, v->max_speed * 10 >> 4); |
1014 SET_DPARAM32(1, v->u.rail.cached_power); |
1014 SetDParam(1, v->u.rail.cached_power); |
1015 SET_DPARAM16(0, v->u.rail.cached_weight); |
1015 SetDParam(0, v->u.rail.cached_weight); |
1016 DrawString(x, 25, STR_885E_WEIGHT_T_POWER_HP_MAX_SPEED, 0); |
1016 DrawString(x, 25, STR_885E_WEIGHT_T_POWER_HP_MAX_SPEED, 0); |
1017 |
1017 |
1018 SET_DPARAM32(0, v->profit_this_year); |
1018 SetDParam(0, v->profit_this_year); |
1019 SET_DPARAM32(1, v->profit_last_year); |
1019 SetDParam(1, v->profit_last_year); |
1020 DrawString(x, 35, STR_885F_PROFIT_THIS_YEAR_LAST_YEAR, 0); |
1020 DrawString(x, 35, STR_885F_PROFIT_THIS_YEAR_LAST_YEAR, 0); |
1021 |
1021 |
1022 SET_DPARAM8(0, 100 * (v->reliability>>8) >> 8); |
1022 SetDParam(0, 100 * (v->reliability>>8) >> 8); |
1023 SET_DPARAM16(1, v->breakdowns_since_last_service); |
1023 SetDParam(1, v->breakdowns_since_last_service); |
1024 DrawString(x, 45, STR_8860_RELIABILITY_BREAKDOWNS, 0); |
1024 DrawString(x, 45, STR_8860_RELIABILITY_BREAKDOWNS, 0); |
1025 |
1025 |
1026 SET_DPARAM16(0, v->service_interval); |
1026 SetDParam(0, v->service_interval); |
1027 SET_DPARAM16(1, v->date_of_last_service); |
1027 SetDParam(1, v->date_of_last_service); |
1028 DrawString(x + 11, 141, _patches.servint_ispercent?STR_SERVICING_INTERVAL_PERCENT:STR_883C_SERVICING_INTERVAL_DAYS, 0); |
1028 DrawString(x + 11, 141, _patches.servint_ispercent?STR_SERVICING_INTERVAL_PERCENT:STR_883C_SERVICING_INTERVAL_DAYS, 0); |
1029 |
1029 |
1030 x = 1; |
1030 x = 1; |
1031 y = 57; |
1031 y = 57; |
1032 sel = w->vscroll.pos; |
1032 sel = w->vscroll.pos; |
1048 DrawString(x, y + 2, STR_013F_TOTAL_CAPACITY_TEXT, 0); |
1048 DrawString(x, y + 2, STR_013F_TOTAL_CAPACITY_TEXT, 0); |
1049 do { |
1049 do { |
1050 if (tot_cargo[i][1] > 0 && --sel < 0 && sel >= -5) { |
1050 if (tot_cargo[i][1] > 0 && --sel < 0 && sel >= -5) { |
1051 y += 14; |
1051 y += 14; |
1052 // STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO}) |
1052 // STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO}) |
1053 SET_DPARAM8(0, i); // {CARGO} #1 |
1053 SetDParam(0, i); // {CARGO} #1 |
1054 SET_DPARAM16(1, tot_cargo[i][0]); // {CARGO} #2 |
1054 SetDParam(1, tot_cargo[i][0]); // {CARGO} #2 |
1055 SET_DPARAM8(2, i); // {SHORTCARGO} #1 |
1055 SetDParam(2, i); // {SHORTCARGO} #1 |
1056 SET_DPARAM16(3, tot_cargo[i][1]); // {SHORTCARGO} #2 |
1056 SetDParam(3, tot_cargo[i][1]); // {SHORTCARGO} #2 |
1057 DrawString(x, y, STR_013F_TOTAL_CAPACITY, 0); |
1057 DrawString(x, y, STR_013F_TOTAL_CAPACITY, 0); |
1058 } |
1058 } |
1059 } while (++i != NUM_CARGO); |
1059 } while (++i != NUM_CARGO); |
1060 } |
1060 } |
1061 } |
1061 } |
1070 int mod; |
1070 int mod; |
1071 Vehicle *v; |
1071 Vehicle *v; |
1072 switch(e->click.widget) { |
1072 switch(e->click.widget) { |
1073 case 2: /* name train */ |
1073 case 2: /* name train */ |
1074 v = &_vehicles[w->window_number]; |
1074 v = &_vehicles[w->window_number]; |
1075 SET_DPARAM16(0, v->unitnumber); |
1075 SetDParam(0, v->unitnumber); |
1076 ShowQueryString(v->string_id, STR_8865_NAME_TRAIN, 31, 150, w->window_class, w->window_number); |
1076 ShowQueryString(v->string_id, STR_8865_NAME_TRAIN, 31, 150, w->window_class, w->window_number); |
1077 break; |
1077 break; |
1078 case 6: /* inc serv interval */ |
1078 case 6: /* inc serv interval */ |
1079 mod = _ctrl_pressed? 5 : 10; |
1079 mod = _ctrl_pressed? 5 : 10; |
1080 goto do_change_service_int; |
1080 goto do_change_service_int; |
1254 |
1254 |
1255 /* draw the widgets */ |
1255 /* draw the widgets */ |
1256 { |
1256 { |
1257 Player *p = DEREF_PLAYER(window_number); |
1257 Player *p = DEREF_PLAYER(window_number); |
1258 /* Company Name -- (###) Trains */ |
1258 /* Company Name -- (###) Trains */ |
1259 SET_DPARAM16(0, p->name_1); |
1259 SetDParam(0, p->name_1); |
1260 SET_DPARAM32(1, p->name_2); |
1260 SetDParam(1, p->name_2); |
1261 SET_DPARAM16(2, w->vscroll.count); |
1261 SetDParam(2, w->vscroll.count); |
1262 DrawWindowWidgets(w); |
1262 DrawWindowWidgets(w); |
1263 } |
1263 } |
1264 /* draw sorting criteria string */ |
1264 /* draw sorting criteria string */ |
1265 DrawString(85, 15, _vehicle_sort_listing[_train_sort_type[window_number]], 0x10); |
1265 DrawString(85, 15, _vehicle_sort_listing[_train_sort_type[window_number]], 0x10); |
1266 /* draw arrow pointing up/down for ascending/descending soring */ |
1266 /* draw arrow pointing up/down for ascending/descending soring */ |
1281 assert(v->type == VEH_Train && v->subtype == 0 && v->owner == window_number); |
1281 assert(v->type == VEH_Train && v->subtype == 0 && v->owner == window_number); |
1282 |
1282 |
1283 DrawTrainImage(v, x + 21, y + 6 + _traininfo_vehicle_pitch, 10, 0, INVALID_VEHICLE); |
1283 DrawTrainImage(v, x + 21, y + 6 + _traininfo_vehicle_pitch, 10, 0, INVALID_VEHICLE); |
1284 DrawVehicleProfitButton(v, x, y+13); |
1284 DrawVehicleProfitButton(v, x, y+13); |
1285 |
1285 |
1286 SET_DPARAM16(0, v->unitnumber); |
1286 SetDParam(0, v->unitnumber); |
1287 if (IsTrainDepotTile(v->tile)) { |
1287 if (IsTrainDepotTile(v->tile)) { |
1288 str = STR_021F; |
1288 str = STR_021F; |
1289 } else { |
1289 } else { |
1290 str = v->age > v->max_age - 366 ? STR_00E3 : STR_00E2; |
1290 str = v->age > v->max_age - 366 ? STR_00E3 : STR_00E2; |
1291 } |
1291 } |
1292 DrawString(x, y+2, str, 0); |
1292 DrawString(x, y+2, str, 0); |
1293 |
1293 |
1294 SET_DPARAM32(0, v->profit_this_year); |
1294 SetDParam(0, v->profit_this_year); |
1295 SET_DPARAM32(1, v->profit_last_year); |
1295 SetDParam(1, v->profit_last_year); |
1296 DrawString(x + 21, y + 18, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0); |
1296 DrawString(x + 21, y + 18, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0); |
1297 |
1297 |
1298 if (v->string_id != STR_SV_TRAIN_NAME) { |
1298 if (v->string_id != STR_SV_TRAIN_NAME) { |
1299 SET_DPARAM16(0, v->string_id); |
1299 SetDParam(0, v->string_id); |
1300 DrawString(x+21, y, STR_01AB, 0); |
1300 DrawString(x+21, y, STR_01AB, 0); |
1301 } |
1301 } |
1302 |
1302 |
1303 y += PLY_WND_PRC__SIZE_OF_ROW_SMALL; |
1303 y += PLY_WND_PRC__SIZE_OF_ROW_SMALL; |
1304 i++; // next train |
1304 i++; // next train |