|  | Routines | 
| Prev: C965 | Up: Map | Next: C9CA | 
| C978 | LD A,($A045) | Return if not generating train in current room | ||
| C97B | OR A | |||
| C97C | RET Z | |||
| C97D | LD A,($A048) | Decrement train appareance counter | ||
| C980 | DEC A | |||
| C981 | LD ($A048),A | |||
| C984 | OR A | Return if counter is not zero | ||
| C985 | RET NZ | |||
| C986 | LD HL,$5E72 | Set HL to the base address for entity definition - visibility of entity | ||
| C989 | LD A,($A092) | Set B to the max number of entities on screen | ||
| C98C | LD B,A | |||
| C98D | LD A,(HL) | if entity not visible jump configure the new train-part (front, rear or wagon) | ||
| C98E | OR A | |||
| C98F | JP Z,$C99D | |||
| C992 | LD DE,$0018 | Increment to the next slot for entity definition and jump back | ||
| C995 | ADD HL,DE | |||
| C996 | DJNZ $C98D | |||
| C998 | XOR A | Stop generating the train if no slots available | ||
| C999 | LD ($A045),A | |||
| C99C | RET | |||
| 
Generate a new train part
 | ||||
| C99D | LD DE,$000C | Point HL to the base address of the corresponent entity configuration | ||
| C9A0 | AND A | |||
| C9A1 | SBC HL,DE | |||
| C9A3 | PUSH HL | Save HL | ||
| C9A4 | POP IX | Restore IX | ||
| C9A6 | LD IY,($A046) | Set A to the entity type for the wagon | ||
| C9AA | LD A,(IY+$00) | |||
| C9AD | CP $FF | if end of train jump forward and stop generating train parts | ||
| C9AF | JP Z,$C9C5 | |||
| C9B2 | CALL $CB88 | Configure entity type wagon | ||
| C9B5 | LD A,(IY+$03) | Set A048 to the next train appearance counter | ||
| C9B8 | LD ($A048),A | |||
| C9BB | LD DE,$0004 | Point A046 to the address for the next train wagon | ||
| C9BE | ADD IY,DE | |||
| C9C0 | LD ($A046),IY | |||
| C9C4 | RET | |||
| C9C5 | XOR A | Stop generating the train - no more wagons left | ||
| C9C6 | LD ($A045),A | |||
| C9C9 | RET | |||
| Prev: C965 | Up: Map | Next: C9CA |