changeset 374 | 0309a855fc66 |
parent 337 | cbe0c766c947 |
child 378 | 3f1eef0eb2c0 |
373:9eda1aad5f04 | 374:0309a855fc66 |
---|---|
21 0xDCC, 0xDD4, 0xDE4, 0xDDC, 0xDEC, 0xDC4, 0xDDC, 0xDE4, |
21 0xDCC, 0xDD4, 0xDE4, 0xDDC, 0xDEC, 0xDC4, 0xDDC, 0xDE4, |
22 0xE2C, 0xE34, 0xE3C, 0xC14, 0xC1C, 0xC2C, 0xC3C, 0xC4C, |
22 0xE2C, 0xE34, 0xE3C, 0xC14, 0xC1C, 0xC2C, 0xC3C, 0xC4C, |
23 0xC5C, 0xC64, 0xC6C, 0xC74, 0xC84, 0xC94, 0xCA4 |
23 0xC5C, 0xC64, 0xC6C, 0xC74, 0xC84, 0xC94, 0xCA4 |
24 }; |
24 }; |
25 |
25 |
26 |
|
27 static const uint16 _roadveh_full_adder[63] = { |
26 static const uint16 _roadveh_full_adder[63] = { |
28 0, 88, 0, 0, 0, 0, 48, 48, |
27 0, 88, 0, 0, 0, 0, 48, 48, |
29 48, 48, 0, 0, 64, 64, 0, 16, |
28 48, 48, 0, 0, 64, 64, 0, 16, |
30 16, 0, 88, 0, 0, 0, 0, 48, |
29 16, 0, 88, 0, 0, 0, 0, 48, |
31 48, 48, 48, 0, 0, 64, 64, 0, |
30 48, 48, 48, 0, 0, 64, 64, 0, |
33 48, 48, 48, 48, 0, 0, 64, 64, |
32 48, 48, 48, 48, 0, 0, 64, 64, |
34 0, 16, 16, 0, 8, 8, 8, 8, |
33 0, 16, 16, 0, 8, 8, 8, 8, |
35 0, 0, 0, 8, 8, 8, 8 |
34 0, 0, 0, 8, 8, 8, 8 |
36 }; |
35 }; |
37 |
36 |
38 static const byte _roadveh_spritenum[88] = { |
|
39 0, 17, 17, 34, 51, 51, 51, 1, |
|
40 18, 35, 2, 19, 36, 57, 57, 57, |
|
41 3, 20, 37, 4, 21, 38, 5, 22, |
|
42 |
|
43 39, 6, 23, 40, 7, 24, 41, 8, |
|
44 25, 42, 9, 26, 43, 10, 27, 44, |
|
45 11, 28, 45, 12, 29, 46, 13, 30, |
|
46 47, 14, 31, 48, 15, 32, 49, 16, |
|
47 |
|
48 33, 50, 52, 52, 52, 53, 53, 53, |
|
49 54, 54, 54, 55, 55, 55, 56, 56, |
|
50 56, 58, 58, 58, 59, 59, 59, 60, |
|
51 60, 60, 61, 61, 61, 62, 62, 62, |
|
52 }; |
|
53 |
|
54 const byte _roadveh_speed[88] = { |
|
55 112, 176, 224, 255, 112, 192, 240, 96, |
|
56 176, 224, 96, 176, 224, 96, 176, 224, |
|
57 96, 176, 224, 96, 176, 224, 96, 176, |
|
58 224, 96, 176, 224, 96, 176, 224, 96, |
|
59 176, 224, 96, 176, 224, 96, 176, 224, |
|
60 96, 176, 224, 96, 176, 224, 96, 176, |
|
61 224, 96, 176, 224, 96, 176, 224, 96, |
|
62 176, 224, 96, 176, 224, 96, 176, 224, |
|
63 96, 176, 224, 96, 176, 224, 96, 176, |
|
64 224, 96, 176, 224, 96, 176, 224, 96, |
|
65 176, 224, 96, 176, 224, 96, 176, 224, |
|
66 }; |
|
67 |
|
68 |
|
69 const byte _roadveh_runningcost[88] = { |
|
70 91, 128, 178, 240, 91, 171, 240, 90, |
|
71 168, 240, 90, 168, 240, 90, 168, 240, |
|
72 90, 168, 240, 90, 168, 240, 90, 168, |
|
73 240, 90, 168, 240, 90, 168, 240, 90, |
|
74 168, 240, 90, 168, 240, 90, 168, 240, |
|
75 90, 168, 240, 90, 168, 240, 90, 168, |
|
76 240, 90, 168, 240, 90, 168, 240, 90, |
|
77 168, 240, 90, 168, 240, 90, 168, 240, |
|
78 90, 168, 240, 90, 168, 240, 90, 168, |
|
79 240, 90, 168, 240, 90, 168, 240, 90, |
|
80 168, 240, 90, 168, 240, 90, 168, 240, |
|
81 }; |
|
82 |
|
83 |
|
84 const byte _roadveh_capacity[88] = { |
|
85 31, 35, 37, 40, 30, 35, 38, 20, |
|
86 25, 28, 22, 28, 30, 22, 28, 30, |
|
87 21, 25, 27, 14, 16, 18, 14, 16, |
|
88 18, 20, 25, 30, 20, 22, 24, 22, |
|
89 25, 27, 15, 18, 20, 12, 15, 16, |
|
90 17, 20, 22, 15, 18, 20, 22, 25, |
|
91 27, 21, 25, 27, 18, 20, 23, 17, |
|
92 19, 22, 17, 19, 22, 17, 19, 22, |
|
93 17, 19, 22, 17, 19, 22, 17, 19, |
|
94 22, 17, 19, 22, 17, 19, 22, 17, |
|
95 19, 22, 17, 19, 22, 17, 19, 22, |
|
96 }; |
|
97 |
|
98 const byte _roadveh_cargo_type[88] = { |
|
99 0, 0, 0, 0, 0, 0, 0, 1, |
|
100 1, 1, 2, 2, 2, 2, 2, 2, |
|
101 3, 3, 3, 4, 4, 4, 5, 5, |
|
102 5, 6, 6, 6, 7, 7, 7, 8, |
|
103 8, 8, 9, 9, 9,10,10,10, |
|
104 11,11,11, 9, 9, 9, 8, 8, |
|
105 8, 9, 9, 9, 4, 4, 4, 1, |
|
106 1, 1, 1, 1, 1, 7, 7, 7, |
|
107 8, 8, 8, 6, 6, 6, 3, 3, |
|
108 3, 5, 5, 5, 4, 4, 4,11, |
|
109 11,11,10,10,10, 9, 9, 9, |
|
110 }; |
|
111 |
|
112 const byte _roadveh_price[88] = { |
|
113 120,140,150,160,120,140,160,108, |
|
114 128,138,115,135,145,115,135,145, |
|
115 110,140,150,105,130,140,107,130, |
|
116 140,114,133,143,118,137,147,121, |
|
117 140,150,112,135,145,145,170,180, |
|
118 112,134,144,112,135,145,121,140, |
|
119 150,111,141,151,118,148,158,117, |
|
120 147,157,117,147,157,117,147,157, |
|
121 117,147,157,117,147,157,117,147, |
|
122 157,117,147,157,117,147,157,117, |
|
123 147,157,117,147,157,117,147,157, |
|
124 }; |
|
125 |
|
126 static const byte _road_engine_sounds[88] = { |
|
127 23, 26, 25, 25, 60, 62, 60, 23, |
|
128 23, 23, 23, 23, 23, 62, 60, 62, |
|
129 23, 23, 23, 23, 23, 23, 23, 23, |
|
130 23, 23, 23, 23, 23, 23, 23, 23, |
|
131 23, 23, 23, 23, 23, 23, 23, 23, |
|
132 23, 23, 23, 23, 23, 23, 23, 23, |
|
133 23, 23, 23, 23, 23, 23, 23, 23, |
|
134 23, 23, 63, 64, 63, 64, 63, 64, |
|
135 63, 64, 63, 64, 63, 64, 63, 64, |
|
136 63, 64, 63, 64, 63, 64, 63, 64, |
|
137 63, 64, 63, 64, 63, 64, 63, 64, |
|
138 }; |
|
139 |
37 |
140 static const uint16 _road_veh_fp_ax_or[4] = { |
38 static const uint16 _road_veh_fp_ax_or[4] = { |
141 0x100,0x200,1,2, |
39 0x100,0x200,1,2, |
142 }; |
40 }; |
143 |
41 |
172 return image; |
70 return image; |
173 } |
71 } |
174 |
72 |
175 void DrawRoadVehEngine(int x, int y, int engine, uint32 image_ormod) |
73 void DrawRoadVehEngine(int x, int y, int engine, uint32 image_ormod) |
176 { |
74 { |
177 DrawSprite((6 + _roadveh_images[_roadveh_spritenum[engine - ROAD_ENGINES_INDEX]]) | image_ormod, x, y); |
75 DrawSprite((6 + _roadveh_images[road_vehicle_info(engine)->image_index]) | image_ormod, x, y); |
178 } |
76 } |
179 |
77 |
180 void DrawRoadVehEngineInfo(int engine, int x, int y, int maxw) |
78 void DrawRoadVehEngineInfo(int engine, int x, int y, int maxw) |
181 { |
79 { |
182 engine -= ROAD_ENGINES_INDEX; |
80 SET_DPARAM32(0, ((_price.roadveh_base >> 3) * road_vehicle_info(engine)->base_cost) >> 5); |
183 |
81 SET_DPARAM16(1, road_vehicle_info(engine)->max_speed * 10 >> 5); |
184 SET_DPARAM32(0, ((_price.roadveh_base >> 3) * _roadveh_price[engine]) >> 5); |
82 SET_DPARAM32(2, road_vehicle_info(engine)->running_cost * _price.roadveh_running >> 8); |
185 SET_DPARAM16(1, _roadveh_speed[engine] * 10 >> 5); |
83 |
186 SET_DPARAM32(2, _roadveh_runningcost[engine] * _price.roadveh_running >> 8); |
84 SET_DPARAM16(4, road_vehicle_info(engine)->capacity); |
187 |
85 SET_DPARAM16(3, _cargoc.names_long_p[road_vehicle_info(engine)->cargo_type]); |
188 SET_DPARAM16(4, _roadveh_capacity[engine]); |
|
189 SET_DPARAM16(3, _cargoc.names_long_p[_roadveh_cargo_type[engine]]); |
|
190 |
86 |
191 DrawStringMultiCenter(x, y, STR_902A_COST_SPEED_RUNNING_COST, maxw); |
87 DrawStringMultiCenter(x, y, STR_902A_COST_SPEED_RUNNING_COST, maxw); |
192 } |
88 } |
193 |
89 |
194 static int32 EstimateRoadVehCost(byte engine_type) |
90 static int32 EstimateRoadVehCost(byte engine_type) |
195 { |
91 { |
196 return ((_price.roadveh_base >> 3) * _roadveh_price[engine_type - ROAD_ENGINES_INDEX]) >> 5; |
92 return ((_price.roadveh_base >> 3) * road_vehicle_info(engine_type)->base_cost) >> 5; |
197 } |
93 } |
198 |
94 |
199 int32 CmdBuildRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2) |
95 int32 CmdBuildRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2) |
200 { |
96 { |
201 int32 cost; |
97 int32 cost; |
233 v->z_height = 6; |
129 v->z_height = 6; |
234 |
130 |
235 v->u.road.state = 254; |
131 v->u.road.state = 254; |
236 v->vehstatus = VS_HIDDEN|VS_STOPPED|VS_DEFPAL; |
132 v->vehstatus = VS_HIDDEN|VS_STOPPED|VS_DEFPAL; |
237 |
133 |
238 v->spritenum = _roadveh_spritenum[p1 - ROAD_ENGINES_INDEX]; |
134 v->spritenum = road_vehicle_info(p1)->image_index; |
239 v->cargo_type = _roadveh_cargo_type[p1 - ROAD_ENGINES_INDEX]; |
135 v->cargo_type = road_vehicle_info(p1)->cargo_type; |
240 v->cargo_cap = _roadveh_capacity[p1 - ROAD_ENGINES_INDEX]; |
136 v->cargo_cap = road_vehicle_info(p1)->capacity; |
241 // v->cargo_count = 0; |
137 // v->cargo_count = 0; |
242 v->value = cost; |
138 v->value = cost; |
243 // v->day_counter = 0; |
139 // v->day_counter = 0; |
244 // v->next_order_param = v->next_order = 0; |
140 // v->next_order_param = v->next_order = 0; |
245 // v->load_unload_time_rem = 0; |
141 // v->load_unload_time_rem = 0; |
247 |
143 |
248 // v->u.road.unk2 = 0; |
144 // v->u.road.unk2 = 0; |
249 // v->u.road.overtaking = 0; |
145 // v->u.road.overtaking = 0; |
250 |
146 |
251 v->last_station_visited = 0xFF; |
147 v->last_station_visited = 0xFF; |
252 v->max_speed = _roadveh_speed[p1 - ROAD_ENGINES_INDEX]; |
148 v->max_speed = road_vehicle_info(p1)->max_speed; |
253 v->engine_type = (byte)p1; |
149 v->engine_type = (byte)p1; |
254 |
150 |
255 e = &_engines[p1]; |
151 e = &_engines[p1]; |
256 v->reliability = e->reliability; |
152 v->reliability = e->reliability; |
257 v->reliability_spd_dec = e->reliability_spd_dec; |
153 v->reliability_spd_dec = e->reliability_spd_dec; |
723 InvalidateVehicleOrderWidget(v); |
619 InvalidateVehicleOrderWidget(v); |
724 } |
620 } |
725 |
621 |
726 static void StartRoadVehSound(Vehicle *v) |
622 static void StartRoadVehSound(Vehicle *v) |
727 { |
623 { |
728 int s = _road_engine_sounds[v->engine_type - ROAD_ENGINES_INDEX]; |
624 int s = road_vehicle_info(v->engine_type)->sfx; |
729 if (s == 23 && (v->tick_counter&3) == 0) s++; |
625 if (s == 23 && (v->tick_counter&3) == 0) s++; |
730 SndPlayVehicleFx(s, v); |
626 SndPlayVehicleFx(s, v); |
731 } |
627 } |
732 |
628 |
733 typedef struct RoadVehFindData { |
629 typedef struct RoadVehFindData { |
1567 } |
1463 } |
1568 |
1464 |
1569 if (v->vehstatus & VS_STOPPED) |
1465 if (v->vehstatus & VS_STOPPED) |
1570 return; |
1466 return; |
1571 |
1467 |
1572 cost = _roadveh_runningcost[v->engine_type - ROAD_ENGINES_INDEX] * _price.roadveh_running / 364; |
1468 cost = road_vehicle_info(v->engine_type)->running_cost * _price.roadveh_running / 364; |
1573 |
1469 |
1574 v->profit_this_year -= cost >> 8; |
1470 v->profit_this_year -= cost >> 8; |
1575 |
1471 |
1576 SET_EXPENSES_TYPE(EXPENSES_ROADVEH_RUN); |
1472 SET_EXPENSES_TYPE(EXPENSES_ROADVEH_RUN); |
1577 SubtractMoneyFromPlayerFract(v->owner, cost); |
1473 SubtractMoneyFromPlayerFract(v->owner, cost); |