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
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
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
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
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
def t_STRING_LITERAL(self, t): r'"([^"\\]|\\.)*"' t.value = expression.StringLiteral(t.value[1:-1], t.lineno) return t