item(booster_wagon ...)
{
}
// return power, as computed in TEMP(0)
switch (..., power_final, [ LOAD_TEMP(0) ] ) {
return
}
// check vehicle at position 1 from front, and add 400 if booster
switch (..., power_check_1, [
STORE_TEMP(2, 0x10F),
STORE_TEMP(LOAD_TEMP(0) + (var[0x61, 0, 0xFFFF, 0xC6] == booster_wagon ? 400 : 0), 0)
] {
default: power_final
}
// check vehicle at position 1 from back, and add 400 if booster
switch (..., power_check_2, [
STORE_TEMP(position_in_consist_from_end - 1, 0x10F),
STORE_TEMP(LOAD_TEMP(0) + (var[0x61, 0, 0xFFFF, 0xC6] == booster_wagon ? 400 : 0), 0)
] {
default: power_check_1
}
// check vehicle at position 2 from front, and add 100 if booster
switch (..., power_check_3, [
STORE_TEMP(2, 0x10F),
STORE_TEMP(LOAD_TEMP(0) + (var[0x61, 0, 0xFFFF, 0xC6] == booster_wagon ? 100 : 0), 0)
] {
default: power_check_2
}
// check vehicle at position 2 from back, and add 100 if booster
switch (..., power_check_4, [
STORE_TEMP(position_in_consist_from_end - 2, 0x10F),
STORE_TEMP(LOAD_TEMP(0) + (var[0x61, 0, 0xFFFF, 0xC6] == booster_wagon ? 100 : 0), 0)
] {
default: power_check_3
}
// basic power is 2000 + 200 per booster vehicle
switch (..., power_switch, [
STORE_TEMP(2000 + count_veh_id(booster_wagon) * 200, 0),
train_length
])
{
1..2: power_final; // no wagons, no bonus
3: power_check_1; // one wagon
4: power_check_2; // two wagons
5: power_check_3; // three wagons
default: power_check_4; // four or more wagons
}
item(engine ...)
{
power: power_switch;
}