}
ms= -1;
- if (ps->remain)
+ if (ps->remain && CIXF_FORCE)
MUSTECR( ps_neednumber(ps,&ms,0,100000,"milliseconds") );
MUSTECR( ps_neednoargs(ps) );
"-V"[ seg->pred_vacated ],
"-p"[ seg->will_polarise ]);
+ /* set ownership and det_ignore */
if (seg->pred_present || seg->pred_vacated) {
seg->owner= tra;
seg->det_ignore= seg->now_present;
seg->det_ignore= 0;
seg->owner= 0;
}
+
+ /* garbage collect our previous plan */
+ if (!seg->owner) {
+ assert(!seg->motion_newplan);
+ if (!seg->moving) {
+ movpos_unreserve(seg->motion);
+ seg->motion= 0;
+ }
+ }
+ if (seg->owner != tra)
+ continue;
+
+ /* now it's our segment: */
+
if (seg->motion_newplan == seg->motion) {
seg->motion_newplan= 0;
} else {
actual_inversions_done();
report_train_ownerships(tra,u.hindmost,0);
+
+ if (u.desire_move && !u.desire_move->owner)
+ /* Oh! Train must be slower and less far advanced than expected.
+ * Well, then we can move it right away. */
+ return movpos_change(u.desire_move,u.desire_movposcomb,-1,0);
+
return 0;
xproblem:
u.train= seg->owner;
if (!seg->owner)
- return 0;
+ return movpos_change(seg,comb,-1,0);
if (allow_queueing<2) {
if (seg->det_ignore)