equal
deleted
inserted
replaced
289 } |
289 } |
290 } |
290 } |
291 |
291 |
292 v->max_speed = max_speed; |
292 v->max_speed = max_speed; |
293 |
293 |
294 if (v->u.rail.railtype != 2) { |
294 if (v->u.rail.railtype != RAILTYPE_MAGLEV) { |
295 resistance = 13 * mass / 10; |
295 resistance = 13 * mass / 10; |
296 resistance += 60 * num; |
296 resistance += 60 * num; |
297 resistance += friction * mass * speed / 1000; |
297 resistance += friction * mass * speed / 1000; |
298 resistance += (area * drag_coeff * speed * speed) / 10000; |
298 resistance += (area * drag_coeff * speed * speed) / 10000; |
299 } else |
299 } else |
301 resistance += incl; |
301 resistance += incl; |
302 resistance *= 4; //[N] |
302 resistance *= 4; //[N] |
303 |
303 |
304 if (speed > 0) { |
304 if (speed > 0) { |
305 switch (v->u.rail.railtype) { |
305 switch (v->u.rail.railtype) { |
306 case 0: |
306 case RAILTYPE_RAIL: |
307 case 1: |
307 case RAILTYPE_MONO: |
308 force = power / speed; //[N] |
308 force = power / speed; //[N] |
309 force *= 22; |
309 force *= 22; |
310 force /= 10; |
310 force /= 10; |
311 break; |
311 break; |
312 |
312 |
313 case 2: |
313 case RAILTYPE_MAGLEV: |
314 force = power / 25; |
314 force = power / 25; |
315 break; |
315 break; |
316 } |
316 } |
317 } else { |
317 } else { |
318 //"kickoff" acceleration |
318 //"kickoff" acceleration |
319 force = (mass * 8) + resistance; |
319 force = (mass * 8) + resistance; |
320 } |
320 } |
321 |
321 |
322 if (force <= 0) force = 10000; |
322 if (force <= 0) force = 10000; |
323 |
323 |
324 if (v->u.rail.railtype != 2) force = min(force, mass * 10 * 200); |
324 if (v->u.rail.railtype != RAILTYPE_MAGLEV) force = min(force, mass * 10 * 200); |
325 |
325 |
326 if (mode == AM_ACCEL) { |
326 if (mode == AM_ACCEL) { |
327 return (force - resistance) / (mass * 4); |
327 return (force - resistance) / (mass * 4); |
328 } else { |
328 } else { |
329 return min((-force - resistance) / (mass * 4), 10000 / (mass * 4)); |
329 return min((-force - resistance) / (mass * 4), 10000 / (mass * 4)); |
1741 do { |
1741 do { |
1742 EngineID engtype = v->engine_type; |
1742 EngineID engtype = v->engine_type; |
1743 |
1743 |
1744 // no smoke? |
1744 // no smoke? |
1745 if (RailVehInfo(engtype)->flags & 2 || |
1745 if (RailVehInfo(engtype)->flags & 2 || |
1746 GetEngine(engtype)->railtype > 0 || |
1746 GetEngine(engtype)->railtype > RAILTYPE_RAIL || |
1747 (v->vehstatus & VS_HIDDEN) || (v->u.rail.track & 0xC0)) |
1747 (v->vehstatus & VS_HIDDEN) || (v->u.rail.track & 0xC0)) |
1748 continue; |
1748 continue; |
1749 |
1749 |
1750 switch (RailVehInfo(engtype)->engclass) { |
1750 switch (RailVehInfo(engtype)->engclass) { |
1751 case 0: |
1751 case 0: |
1786 }; |
1786 }; |
1787 |
1787 |
1788 EngineID engtype = v->engine_type; |
1788 EngineID engtype = v->engine_type; |
1789 |
1789 |
1790 switch (GetEngine(engtype)->railtype) { |
1790 switch (GetEngine(engtype)->railtype) { |
1791 case 0: |
1791 case RAILTYPE_RAIL: |
1792 SndPlayVehicleFx(sfx[RailVehInfo(engtype)->engclass], v); |
1792 SndPlayVehicleFx(sfx[RailVehInfo(engtype)->engclass], v); |
1793 break; |
1793 break; |
1794 case 1: |
1794 |
|
1795 case RAILTYPE_MONO: |
1795 SndPlayVehicleFx(SND_47_MAGLEV_2, v); |
1796 SndPlayVehicleFx(SND_47_MAGLEV_2, v); |
1796 break; |
1797 break; |
1797 case 2: |
1798 |
|
1799 case RAILTYPE_MAGLEV: |
1798 SndPlayVehicleFx(SND_41_MAGLEV, v); |
1800 SndPlayVehicleFx(SND_41_MAGLEV, v); |
1799 break; |
1801 break; |
1800 } |
1802 } |
1801 } |
1803 } |
1802 |
1804 |