Example #1
0
 def register_names(self):
     for i, tracktype in enumerate(self.tracktype_list):
         if isinstance(tracktype, assignment.Assignment):
             name = tracktype.name
             val_list = []
             for rt in tracktype.value:
                 if isinstance(rt, expression.Identifier):
                     val_list.append(
                         expression.StringLiteral(rt.value, rt.pos))
                 else:
                     val_list.append(rt)
                 expression.parse_string_to_dword(
                     val_list[-1]
                 )  # we don't care about the result, only validate the input
             self.tracktype_list[i] = val_list if len(
                 val_list) > 1 else val_list[0]
         else:
             name = tracktype
             if isinstance(tracktype, expression.Identifier):
                 self.tracktype_list[i] = expression.StringLiteral(
                     tracktype.value, tracktype.pos)
             expression.parse_string_to_dword(
                 self.tracktype_list[i]
             )  # we don't care about the result, only validate the input
         self.tracktype_table[name.value] = i
Example #2
0
 def register_names(self):
     generic.OnlyOnce.enforce(self, "cargo table")
     for i, cargo in enumerate(self.cargo_list):
         if isinstance(cargo, expression.Identifier):
             self.cargo_list[i] = expression.StringLiteral(
                 cargo.value, cargo.pos)
         expression.parse_string_to_dword(
             self.cargo_list[i]
         )  # we don't care about the result, only validate the input
         global_constants.cargo_numbers[self.cargo_list[i].value] = i
Example #3
0
 def register_names(self):
     generic.OnlyOnce.enforce(self, "rail type table")
     global_constants.is_default_railtype_table = False
     global_constants.railtype_table.clear()
     for i, railtype in enumerate(self.railtype_list):
         if isinstance(railtype, assignment.Assignment):
             name = railtype.name
             val_list = []
             for rt in railtype.value:
                 if isinstance(rt, expression.Identifier):
                     val_list.append(expression.StringLiteral(rt.value, rt.pos))
                 else:
                     val_list.append(rt)
                 expression.parse_string_to_dword(val_list[-1]) # we don't care about the result, only validate the input
             self.railtype_list[i] = val_list if len(val_list) > 1 else val_list[0]
         else:
             name = railtype
             if isinstance(railtype, expression.Identifier):
                 self.railtype_list[i] = expression.StringLiteral(railtype.value, railtype.pos)
             expression.parse_string_to_dword(self.railtype_list[i]) # we don't care about the result, only validate the input
         global_constants.railtype_table[name.value] = i
Example #4
0
File: action0.py Project: spnda/nml
def get_tracktypelist_action(table_prop_id, cond_tracktype_not_defined,
                             tracktype_list):
    action6.free_parameters.save()
    act6 = action6.Action6()

    action_list = []
    action0, offset = create_action0(0x08, expression.ConstantNumeric(0), act6,
                                     action_list)
    id_table = []
    offset += 1  # Skip property number
    for tracktype in tracktype_list:
        if isinstance(tracktype, expression.StringLiteral):
            id_table.append(tracktype)
            offset += 4
            continue
        param, extra_actions = actionD.get_tmp_parameter(
            expression.ConstantNumeric(
                expression.parse_string_to_dword(tracktype[-1])))
        action_list.extend(extra_actions)
        for idx in range(len(tracktype) - 2, -1, -1):
            val = expression.ConstantNumeric(
                expression.parse_string_to_dword(tracktype[idx]))
            action_list.append(
                action7.SkipAction(0x09, 0x00, 4,
                                   (cond_tracktype_not_defined, None),
                                   val.value, 1))
            action_list.append(
                actionD.ActionD(
                    expression.ConstantNumeric(param),
                    expression.ConstantNumeric(0xFF),
                    nmlop.ASSIGN,
                    expression.ConstantNumeric(0xFF),
                    val,
                ))
        act6.modify_bytes(param, 4, offset)
        id_table.append(expression.StringLiteral(r"\00\00\00\00", None))
        offset += 4
    action0.prop_list.append(IDListProp(table_prop_id, id_table))
    action0.num_ids = len(tracktype_list)

    if len(act6.modifications) > 0:
        action_list.append(act6)

    action_list.append(action0)
    action6.free_parameters.restore()
    return action_list
Example #5
0
 def register_names(self):
     generic.OnlyOnce.enforce(self, "cargo table")
     for i, cargo in enumerate(self.cargo_list):
         if isinstance(cargo, expression.Identifier):
             self.cargo_list[i] = expression.StringLiteral(
                 cargo.value, cargo.pos)
         expression.parse_string_to_dword(
             self.cargo_list[i]
         )  # we don't care about the result, only validate the input
         if self.cargo_list[i].value in global_constants.cargo_numbers:
             generic.print_warning(
                 generic.Warning.GENERIC,
                 "Duplicate entry in cargo table: {}".format(
                     self.cargo_list[i].value),
                 cargo.pos,
             )
         else:
             global_constants.cargo_numbers[self.cargo_list[i].value] = i
Example #6
0
 def t_STRING_LITERAL(self, t):
     r'"([^"\\]|\\.)*"'
     t.value = expression.StringLiteral(t.value[1:-1], t.lineno)
     return t